通过命令行使用密钥登录远程SSH主机的步骤如下:
1. 生成SSH密钥对(客户端)
在本地终端执行以下命令生成密钥对(默认保存路径为~/.ssh/id_rsa):
bash
ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐ed25519算法(兼容性更好)
# 若服务器较旧,改用RSA算法:ssh-keygen -t rsa -b 4096
- 按提示选择保存路径(默认即可),可设置密钥锁码(可选)。
- 生成的文件:
id_ed25519(私钥):需严格保密。id_ed25519.pub(公钥):需上传至服务器。
2. 将公钥上传至服务器
方法一:自动上传(推荐)
bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip
输入服务器密码后,公钥会自动追加到服务器的~/.ssh/authorized_keys文件中。
方法二:手动上传
-
复制公钥内容:
bashcat ~/.ssh/id_ed25519.pub # 查看并复制公钥 -
登录服务器并操作:
bashssh username@server_ip mkdir -p ~/.ssh echo "粘贴公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh # 设置目录权限 chmod 600 ~/.ssh/authorized_keys # 设置文件权限
3. 配置SSH客户端使用密钥
在本地~/.ssh/config文件中添加以下配置(可选):
bash
Host myserver
HostName server_ip
User username
Port 22 # 若非默认端口需修改
IdentityFile ~/.ssh/id_ed25519 # 私钥路径
配置后,直接执行ssh myserver即可登录。
4. 通过命令行直接登录
使用以下命令指定私钥文件:
bash
ssh -i ~/.ssh/id_ed25519 username@server_ip -p port_number
-i:指定私钥路径。-p:若服务器SSH端口非默认22,需指定端口号。
5. 服务器端SSH配置(可选)
为提升安全性,建议在服务器修改/etc/ssh/sshd_config:
bash
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 关闭密码登录(可选)
PermitRootLogin yes # 允许root登录(按需设置)
修改后重启SSH服务:
bash
sudo systemctl restart sshd # Ubuntu/Debian
sudo service ssh restart # CentOS/RHEL
通过SSH在TRAE里面访问远程主机:参见
常见问题排查
- 权限错误 :确保服务器
.ssh目录权限为700,authorized_keys为600。 - 密钥不匹配:检查公钥是否完整复制,或重新生成密钥对。
- SELinux拦截 :执行
restorecon -Rv ~/.ssh修复(仅CentOS)。
通过以上步骤,即可实现基于密钥的无密码登录,提升远程连接的安全性。