在 22 以外的某个端口上的 ssh 远程服务器没有密码

Pra*_*tha 16 ssh authentication

我通常连接到远程服务器

ssh 用户@server.com -p 11000

然后每次为用户提供密码。我应该如何避免每次使用 ssh 连接时都输入密码?

phu*_*ehe 23

首先,把它放在~/.ssh/config

Host server
HostName server.com
Port 11000
User user
Run Code Online (Sandbox Code Playgroud)

您将能够ssh server,然后键入密码。

其次,检查~/.ssh/是否有名为id_rsa和 的文件id_rsa.pub。如果没有,则您没有设置任何密钥,因此您必须使用ssh-keygen. 您可以为密钥设置密码或不设置密码。生成的文件id_rsa.pub应如下所示:

ssh-rsa lotofrandomtext user@local

第三,ssh到服务器,~/.ssh/authorized_keys如果文件不存在就创建。然后在~/.ssh/id_rsa.pub此处附加您之前生成的 的内容。这可能意味着将文件内容复制到剪贴板,然后~/.ssh/authorized_keys在文本编辑器中打开并粘贴内容。

或者,使用命令ssh-copy-id server(替换server为 中的名称~/.ssh/config)。这将做与上面相同的事情。有时我看到ssh-copy-id卡住了,所以我真的不喜欢它。

您现在应该可以只使用 ssh ssh server,除非您选择使用密码保护您的私钥。通常,如果您不使用密码短语,您应该通过其他方式(例如全盘加密)保护您的私钥。

第四(仅当您使用密码保护您的私钥时才需要),将其放入~/.bashrc

start_ssh_agent() {
    # Try to use an existing agent
    save=~/.ssh-agent
    if [[ -e "$save" ]]
    then
        . "$save" > /dev/null
    fi
    # No existing agent, start a new one
    if [[ -z "$SSH_AGENT_PID" || ! -e "/proc/$SSH_AGENT_PID" ]]
    then
        ssh-agent > "$save"
        . "$save" > /dev/null
        ssh-add
    fi
}
start_ssh_agent
Run Code Online (Sandbox Code Playgroud)

有了这个,您只需在每次计算机启动时输入一次密码。

  • “叙述”还应该包括讨论如何避免一直输入那个讨厌的密码。:-) ssh-agent 和/或钥匙串是可以考虑的。 (2认同)

Fah*_*tha 6

作为 phunehehe 答案的补充,请参阅Gentoo Linux Keychain Guide以获取keychain指南。钥匙串还使用ssh-agent。ssh-agent 守护进程使密码可用(当 ssh-agent 守护进程终止时它变得不可用),但 keychain reuses an ssh-agent between logins, and optionally prompts for passphrases each time the user logs in,引用指南。