SSH密钥可以在linux生成,也可以在Windows 上生成,用法都是一样的。
如果在Windows上生成,公钥需要上传至Linux,并写入到authorized_keys文件;
如果在Linux上生成,私钥下载到Windows使用。
服务器间的相互免密登陆也是一样的用法。
下面介绍的是在Linux服务器生成ssh密钥:
1、进入Linux系统的用户目录下的.ssh目录下,root用户是/root/.ssh,普通用户是/home/您的用户名/.ssh,我们以root用户为例:
密钥生成命令:
ssh-keygen -f /root/.ssh/daniel -t rsa -b 4096
# -f :生成密钥对的路径及文件命名,也可以不写如:ssh-keygen -t rsa
# -b :指定了长度,也可以不加
daniel
:私钥,放在自己电脑上用来登录daniel.pub
:公钥,部署在服务器上用来校验- passphrase 是给私钥添加一个密码,也可以直接回车,不加密码
2、把公钥拷写入到authorized_keys文件,这里可以使用ssh-copy-id自动完成,也可以手动追加公钥到文件内。
方法一(推荐):使用ssh-copy-id
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 1022 root@43.129.xxx.xxx
#-p :指定端口,不是默认端口(22)需要指定端口,如1022
#地址:要远程访问的服务器用户名@ip
需要输入root的登陆密码确定。
方法二:
进入远程服务器需要SSH登录的用户的目录下,这里仍然用root用户,cd /root/.ssh,执行ls看看目录下是否有authorized_keys文件没有的话则执行以下命令创建:
touch authorized_keys
执行成功会创建空authorized_keys文件,授予600权限(注意:此处权限必须是600):
chmod 600 /root/.ssh/authorized_keys
如果已经有了authorized_keys文件,这直接执行以下的密钥追加工作。
将上面生成的公钥daniel.pub追加到authorized_keys文件中:
cat /root/.ssh/daniel.pub >> /root/.ssh/authorized_keys
3、对/etc/ssh/sshd_config 文件修改配置:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
#公钥文件存放的位置
# %h 所代表为目前linux登陆用户根目录,如果写绝对值如/root/.ssh 只能配置此根目录对应的用户,如果有多个用户需要密钥配置,需要%h来配置
修改完配置后,一定要重启ssh
systemctl restart sshd
4、 密钥准备好了接下来就可以使用密钥登录了
在Windows系统上使用密钥的话要看您使用的工具是否支持密钥登录,把linux上的私钥daniel 下载到windows,再用远程工具导入私钥 登陆。
命令登陆:
ssh -i ./daniel root@43.129.xxx.xxx
或者ssh root@43.129.xxx.xxx -i ./daniel
注意:daniel是私钥,这里是进入私钥的目录下操作的,如果没在私钥的目录下,请写全目录,比如/opt/daniel,也可以是您自定义的目录。执行命令过程中,如果创建密钥对的时候设置了密码,则会提示您输入密码,没有的话会直接登录。
5、如果一个服务器有多个用户需要配置密钥登陆,重复上面操作,对应好各自用户根目录下的公钥文件及authorized_keys文件即可,sshd_config 不需要再修改的。如:
注:
known_hosts:ssh会把你每个你访问过计算机的公钥(public key)都记录在known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
authorized_keys:为了让两个机器之间使用ssh不需要用户名和密码,采用了数字签名RSA或者DSA来完成这个操作。