免密登录 No more password
每次输入密码认证比较麻烦,使用公钥认证,可以做到免密直接登录。这个也常用于自动化操作。
该方法适用于各种ssh客户端,包括但不限于高版本
windows 10自带的ssh和git-bash带的ssh,还有Termux。
生成密钥对
公钥认证首先要有一个密钥对。 ssh一般自带的工具:ssh-keygen,默认生成rsa密钥对
# -b 指定密钥位数
ssh-keygen -C "备注信息" -b 4096
上面的命令会默认在家目录的.ssh 文件夹下生成一个id_rsa和id_rsa.pub配对的两个文件
$ ls ~/.ssh/
authorized_keys id_rsa id_rsa.pub known_hosts
id_rsa里面存放的是私钥,id_rsa.pub存的是公钥。在公钥认证体系里私钥是绝对私密的,而公钥则是可以给公之于众的。所以请务必保存好私钥文件,谨防泄露。
配置server端ssh
有了密钥之后你需要登录服务器修改配置支持公钥认证。首先编辑/etc/ssh/ssh_config,确保公钥认证开启
PubkeyAuthentication yes
添加公钥
然后将你本地的公钥(id_rsa.pub)添加到服务器上面用户目录下.ssh/authorized_keys中,新建一行添加进去即可一般一个公钥一行。
vim ~/.ssh/authorized_keys
# 或者
echo [pub key here]>>~/.ssh/authorized_keys
也可以在本地机器上用ssh-copy-id命令简化一键完成
ssh-copy-id user@hostname
每个用户之间的公钥配置是独立的,比如说你配置了用户
user1,root用户依旧是没法免密登录的,需要再复制公钥到root的.ssh/authorized_keys中
然后试试用ssh user@hostname直接登录试试看吧
公钥的撤销
加入你的私钥不小心被被人知道了,或者你的电脑一不小心丢了,这个时候那个私钥已经脱离你的控制范围了。为了防止私钥被他人利用(拿到私钥就可以以你的身份登录了),你只需在服务器上将对应的公钥删除,就可以完成公钥的撤销。在这种情况下如果你有多个设备配置了免密登录,其他设备是不会被影响的。想一想如果是密码泄露会怎么样。
设置别名 No more [email protected]
每次都输入过长的用户名@域名/IP 总是很麻烦. 可以通过配置sshcofnig文件来保存主机的信息, 并设置别名:
在~/.ssh/config 文件中输入如下配置即可用ssh myserver代替ssh -p 2222 [email protected]
Host myserver
Hostname long.hostname.com
Port 2222
User username
当然如果myserver 也还是很长这个可以自由发挥写成更短的别名.
这个文件支持非常多的配置项, 具体可以用命令man 5 ssh_config 查看
Last modified on 2021-08-29