Skip to content

服务器配置关闭 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 配置

  1. 通过 vim 修改/etc/ssh/sshd_config 文件配置
    bash
    PubkeyAuthentication yes
    PasswordAuthentication no
  2. 重启 ssh 服务
    bash
    sudo service ssh restart
ssh_configsshd_cofnig 有什么区别?

ssh_configsshd_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 的命令完成(具体命令取决于你的操作系统)。