Appearance
服务器配置关闭 ssh 密码登录
说明
这里以 Ubuntu 18.04.6 LTS 为例
1. 把宿主机的公钥传递至服务器
OpenSSH 规定,用户公钥保存在服务器的~/.ssh/authorized_keys
文件。每个公钥占据一行。如果该文件不存在,可以手动创建。
方法一
bash
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
上面示例中,user@host
要替换成你所要登录的用户名和主机名。
注意,authorized_keys
文件的权限要设为644
,即只有文件所有者才能写。如果权限设置不对,SSH 服务器可能会拒绝读取该文件。
bash
chmod 644 ~/.ssh/authorized_keys
只要公钥上传到服务器,下次登录时,OpenSSH 就会自动采用密钥登录,不再提示输入密码。
方法二
OpenSSH 自带一个ssh-copy-id
命令,可以自动将公钥拷贝到远程服务器的~/.ssh/authorized_keys
文件。如果~/.ssh/authorized_keys
文件不存在,ssh-copy-id
命令会自动创建该文件。
bash
ssh-copy-id -i id_rsa user@host
无法将“ssh-copy-id”项识别为 cmdlet、函数、脚本文件或可运行程序的名称...
在终端先执行以下内容:
bash
function ssh-copy-id([string]$userAtMachine, $args){
$publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub"
if (!(Test-Path "$publicKey")){
Write-Error "ERROR: failed to open ID file '$publicKey': No such file"
}
else {
& cat "$publicKey" | ssh $args $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
}
}
再执行ssh-copy-id username@ip
即可。
公钥文件可以不指定路径和.pub
后缀名,ssh-copy-id
会自动在~/.ssh
目录里面寻找。
警告
注意, ssh-copy-id
是直接将公钥添加到authorized_keys
文件的末尾。如果authorized_keys
文件的末尾不是一个换行符,会导致新的公钥添加到前一个公钥的末尾,两个公钥连在一起,使得它们都无法生效。所以,如果authorized_keys
文件已经存在,使用ssh-copy-id
命令之前,务必保证authorized_keys
文件的末尾是换行符(假设该文件已经存在)。
2. 设置服务器 ssh 配置
- 通过 vim 修改
/etc/ssh/sshd_config
文件配置bashPubkeyAuthentication yes PasswordAuthentication no
- 重启 ssh 服务bash
sudo service ssh restart
ssh_config
与 sshd_cofnig
有什么区别?
ssh_config
和 sshd_config
文件都位于 SSH 目录中,但它们分别用于配置 SSH 客户端和 SSH 服务器端的不同方面。
ssh_config:这个文件用于配置 SSH 客户端的行为。当你使用 SSH 命令连接到另一台计算机时,SSH 客户端会参考 ssh_config 文件中的设置。例如,你可以在这个文件中设定连接超时、默认用户名、密钥文件的位置等。ssh_config 文件通常位于 /etc/ssh/ssh_config
,这是全局配置,适用于系统上的所有用户;用户还可以有自己的个人配置文件 ~/.ssh/config。
sshd_config:这个文件用于配置 SSH 服务器端的行为。当别的计算机试图通过 SSH 连接到你的服务器时,SSH 服务器(sshd)会根据 sshd_config 文件中的设置来处理连接。在这个文件中,你可以配置许多服务器端的选项,比如端口号、允许的认证方法、最大连接数等。sshd_config 文件通常位于 /etc/ssh/sshd_config
。
总结:
如果你想配置你的 SSH 客户端(即你用来连接其他机器的 SSH 工具),你应该编辑 ssh_config 或你的个人 ~/.ssh/config 文件。 如果你想配置作为服务器接受 SSH 连接的机器,你应该编辑 sshd_config 文件。 在进行任何配置更改后,对于 SSH 客户端,更改通常会立即生效,因为每次连接时都会读取配置文件。而对于 SSH 服务器端,通常需要重启 SSH 服务以应用新的配置,这可以通过类似 sudo systemctl restart sshd 的命令完成(具体命令取决于你的操作系统)。