本文说明如何使用密钥文件实现SSH免密码登陆Linux服务器。
生成密钥文件
首先使用下面的命令在本地机器上生成公钥文件:
ssh-keygen -b 1024 -t dsa -N <yourKeypasswd> |
其中<yourKeypasswd>
为你使用keyfile时的密码,非必选项,可以提高安全性。
命令正确执行后,将生成私钥、公钥两个文件,正常情况下应该在~/.ssh/
目录下:
id_dsa |
上传公钥文件到Linux服务器
在shell中使用如下命令上传公钥文件到服务器(可以用域名代替ip
):
ssh-copy-id -i ~/.ssh/id_dsa.pub <remote_user>@<ip> |
该命令自动将公钥复到<remote_user>
用户的~/.ssh/authorized_keys文件中,完成后即可以密钥方式登录。
为不同的服务器配置不同的密钥
出于安全性或者操作上的要求,有时候可能需要使用不同的用户名访问不同的Linux服务器,有两个方法实现这个目标。
方法一:使用ssh-add
生成密钥时指定文件名,<user>
替换成你登陆Linux服务器使用的用户名。上传密钥时指定<user>_dsa.pub
这个文件名。
ssh-keygen -b 1024 -t dsa -N <yourKeypasswd> -f ~/.ssh/<user>_dsa |
然后执行下面的命令:
ssh-add ~/.ssh/<user>_dsa |
上传密钥时指定<user>_dsa.pub
这个文件名,即可以实现通过<user>
用户免密登陆Liux服务器了。
方法二:在SSH config中指定keyfile
如果多个服务器使用的同样的用户名,需要在登陆不同的服务器时使用不同的密钥文件时,方法一就不适用了,方法二可以实现这个目标。方法二时在客户端机器的SSH配置文件中为不同服务器指定
编辑 ~/.ssh/config
,加入如下内容:
Host myhost |
<ip>
是远程服务器的IP,<username>
是登陆Linux服务器使用的用户名。<user>_dsa
是对应的本地私钥的文件名。
设定config后,ssh登录、scp命令可简化,不需要指定具体user@host
,使用配置文件中指定的Host名称即可,如下所示:
ssh myhost |
禁用用户名/密码登录
公共服务器基于安全考虑启用ssh key登陆后禁用用户名/密码登录。
修改ssh config:
sudo nano /etc/ssh/sshd_config
增加(或者修改原来的PasswordAuthentication yes
)为下面的内容:
PasswordAuthentication no