免密配置
如果将输入密码登录比作拿钥匙开门,那么免密登录可以理解为刷脸或者刷指纹开门,要在此之前已经在开门的数据库中录下来。在录下来之后才体会到开门不用钥匙便捷。
所以,免密登录的前提就是远端的服务器能够认识你的机器,而你的机器“刷脸”(免密)进门就需要把它的“脸”(公钥)放到远端的服务器的可信列表里。
步骤
ssh免密,A用户要免密登录B用户,在A用户ssh-keygen生成公钥和私钥,把公钥加入到B用户目录下.ssh/authorized_keys里
1、生成公私钥
ssh-keygen -t rsa
根据提示三次默认回车,就会在 $HOME/.ssh 目录下,会新生成两个文件 id_rsa
和 id_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
通过 scp
将 xxx_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}