默认情况下登录远程服务器是通过ssh方式使用账号和密码进行登录,这种每次输入密码会比较麻烦,可以设置密钥方式登录,无需手动输入密码登录远程服务器
操作步骤
**注意:**密钥算法会导致密钥文件名称不同
1、生成密钥对
powershell
ssh-keygen -t ed25519 -C "你的邮箱地址"
默认密钥存储路径:~/.ssh
路径下会生成两个文件:id_ed25519 id_ed25519.pub
2、保证.ssh目录权限和密钥权限
查看权限命令:
- ls -ld + 目录
- ls -l + 文件名
修改权限命令:
- chmod 700 ~/.ssh
- chmod 600 ~/.ssh/id_ed25519
3、客户端配置~/.ssh/config
一般情况~/.ssh下没有config,需要创建一个config文件,配置文件参数内容
Host:自定义的登陆名称
HostName:服务器IP/域名也可以
User:用户名
Port:22(端口一般默认22)
IdentityFile:~/.ssh/id_ed25519(私钥文件路径一般可以不用配置,会默认使用)
IdentitiesOnly:yes(强制只使用上面指定的私钥,不尝试其他密钥,多个密钥的时候配置或者有使用有问题配置)
ServerAliveInterval:60(保持连接不断线-防超时断开,60秒发一次心跳包)
StrictHostKeyChecking:no(不检查服务器指纹-跳过安全确认)
UserKnownHostsFile:/dev/null(不记录服务器指纹-不保存信任记录)
配置示例
Host test
HostName 192.168.1.2
User root
Port 22
ServerAliveInterval 60
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
4、把公钥传到服务器
自动上传:
-
本地执行命令:ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@IP或域名
-
简化命令:ssh-copy-id 用户名@IP或域名
手动配置:
powershell
# 1. 本地查看公钥
cat ~/.ssh/id_ed25519.pub
# 2. 登录服务器,创建目录与文件(不存在创建)
ssh v-weiyilin@build21.kill.corp.qihoo.net
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 3. 写入公钥(把上面 cat 的结果整行复制)
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB..." >> ~/.ssh/authorized_keys
# 4. 关键权限(必须!否则密钥被拒-可以先查看确认)
chmod 600 ~/.ssh/authorized_keys
5、服务器端确认sshd开启公钥认证
这个如果是关闭状态就不能使用密钥登录的方式(管理员执行,非管理员没有权限执行)
powershell
sshd -T | grep -E 'pubkey|authorizedkeysfile|strictmodes'
输出的参数状态必须是:yes
powershell
pubkeyauthentication yes
6、执行连接测试
命令(test是config中配置的Host名称):ssh -v test
-v:SSH 调试模式,用来查看连接过程、定位错误。
7、快捷命令配置
在./zshrc(Mac)或者/.bashrc(Linux)
alias test="ssh test"
8、特殊情况
一般会有个别情况,比如远程的服务器没有root权限,这种无法校验sshd是否开启,再就是网络环境,安全策略组是否开放22端口等等问题,这种只能慢慢判断定位问题,解决问题。