Back

Ssh免密

免密配置

如果将输入密码登录比作拿钥匙开门,那么免密登录可以理解为刷脸或者刷指纹开门,要在此之前已经在开门的数据库中录下来。在录下来之后才体会到开门不用钥匙便捷。

所以,免密登录的前提就是远端的服务器能够认识你的机器,而你的机器“刷脸”(免密)进门就需要把它的“脸”(公钥)放到远端的服务器的可信列表里。

步骤

ssh免密,A用户要免密登录B用户,在A用户ssh-keygen生成公钥和私钥,把公钥加入到B用户目录下.ssh/authorized_keys里

1、生成公私钥

ssh-keygen -t rsa

根据提示三次默认回车,就会在 $HOME/.ssh 目录下,会新生成两个文件 id_rsaid_rsa.pub 。其中 id_rsa 是私钥,而 id_rsa.pub 是公钥。由于要设置多个 ssh key ,因此在第一个提示所要保存的路径时,可以将密钥名字改为 xxx_rsa

2、将本地的公钥上传至远程服务器

ssh-copy-id -i ~/.ssh/id_rsa.pub  user@10.11.xx.xx

通过 scpxxx_rsa.pub 上传到远程主机 $HOME/.ssh 目录下也行(如果没有,则新建一个)

3、尝试免密登录

ssh user@10.11.xx.xx

权限需要

SSH对公钥、私钥的权限和所有权的要求是非常严格的,总结如下: 1、下面两个目录的所有权必须是user-B,所属组也应该是user-B,前者权限不能是777,后者权限必须为700 /home/user /home/user/.ssh 2、下面公钥文件的所有权必须是user-B,所属组也应该是user-B,权限必须为644 /home/user/.ssh/authorized_keys 3、下面私钥文件的所有权必须是user-A,所属组也应该是user-A,权限必须是600 /home/user/.ssh/id_rsa

4、vi /etc/ssh/sshd_config

//开启以下内容,一般默认即可
HostKey /etc/ssh/ssh_host_rsa_key
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

记得去systemctl restart sshd

别名/多个key

要登录不同的远程主机时,每个帐号参数配置可能不同,比如端口设置不同,这时候敲命令就很劳神费力了。SSH 提供了配置文件用来管理用户的 SSH 会话,该机制可以大大的方便用户登录。

SSH 的配置文件有两个:

$ ~/.ssh/config # 用户配置文件 $ /etc/ssh/ssh_config # 系统配置文件

~/.ssh/ 新建 config 文件,其配置如下:

Host cn_server                      # 关键词、别名
    HostName 10.11.xx.xx           # 主机地址
    Port 22                   # 指定端口
    User root                   # 用户名
    IdentityFile ~/.ssh/xxx_rsa # 认证文件
    StrictHostKeyChecking no    # 关闭提示
# ssh别名链接验证
ssh cn_server

若要设置多个 ssh key ,只需要在 config 文件中添加多个 HOST 即可。 在 .ssh/ 目录下,还有一个文件是 known_hosts ,该文件是已知的主机公钥名单。 在第一次连接远程主机时,OpenSSH 会提示: 无法辨认主机的真实性,询问是否要继续连接 。手动输入 yes 之后 ssh 就会将远程主机地址及对应的公钥添加进 known_hosts 文件。下一次连接同一台远程主机时,OpenSSH 通过 known_hosts 文件识别出它的公钥已经保存在本地了,从而跳过提示。 将 StrictHostKeyChecking 设置成 no 后,在第一次连接时,ssh 将会自动添加远程主机的相关信息,省略了手动敲 yes 的步骤。 最后在终端执行命令 ssh alias 就可以了。

sshpass

sshpass 是一个简单、轻量级的命令行工具,通过它我们能够向命令提示符本身提供密码(非交互式密码验证),这样就可以通过cron 调度器执行自动化的shell 脚本进行备份。

sshpass -p {密码} ssh {用户名}@{主机IP}
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy
© Licensed Under CC BY-NC-SA 4.0