将密码添加到 .ssh/config

Ajo*_*ine 57 linux ubuntu ssh

我正在使用 ubuntu 12.04。我每天都使用 ssh 连接到许多服务器,所以我将它们的参数放在.ssh/config文件中;像这样 :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x
Run Code Online (Sandbox Code Playgroud)

我知道我们应该使用密钥对来确保安全,但是有时我们无法将公钥添加到远程机器中(例如,接受密码并执行特定命令的公共 SSH 服务器,或者没有主目录的用户)。

那么,有没有办法为每个连接将密码放在这个文件中?所以当服务器要求输入密码时,终端把它的通行证发送给服务器,这样我就不用每次都输入密码了。

Dan*_*ner 50

不,没有任何方法可以使用 openssh 内置机制以非交互式方式在命令行上指定或提供密码以进行 ssh 身份验证。至少不是我所知道的。您可以将密码硬编码到 expect 脚本中,但这也不是一个好的解决方案。

正如迈克尔所说,您肯定希望使用密钥对进行无密码身份验证,最终私钥几乎是文件中的一个大密码。

  • 如果他们不允许使用密钥,他们就会误解 ssh 的工作原理——允许密码登录会让你面临字典攻击等(尽管非常非常慢)——用私钥对几乎不可能完成同样的事情,如果他们' 担心密钥落入坏人之手,您可以对密钥的私有部分进行密码加密,以便您需要两个因素才能使用它(密码也可以在您的钥匙串中/由您的 ssh 代理记住) (4认同)

Dar*_*eep 32

为了避免一连串的评论:是的,这是不安全的(甚至可以说是不安全的)。我强烈建议您仅在隔离网络上的实验室情况或不涉及生产服务器或潜在生产服务器的类似情况下执行此操作,而无需完全重置/格式化。

我想设置它,因为我认为我的 2950 交换机不支持私钥/公钥,我希望在某个时候获得这些知识,但我还没有。

使用别名和 sshpass 可以实现这一点。

  1. 安装 sshpass
  2. 更改您的.ssh/config文件以包含问题中列出的用户名
  3. 为您的终端添加别名(我使用 .bashrc 并建议不要使用全局设置)
  4. 使用别名登录目标

我的示例别名是:

alias ssc='sshpass -pcisco ssh'
Run Code Online (Sandbox Code Playgroud)

其中“cisco”是密码。注意 -p 和密码之间没有空格。

用法是(参考问题):

ssc server1
Run Code Online (Sandbox Code Playgroud)

注意:这仅针对使用搜索引擎的人回答了标题中的问题。如果您使用的是问题示例之类的服务器,则应使用私钥/公钥对而不是此答案

  • 当您因某种原因确实无法使用密钥时,这是唯一可行的解​​决方法。 (2认同)

小智 27

是的,如上所述,无法简单地保存密码。我建议使用 ssh 密钥进行授权。

首先,生成您的密钥:

ssh-keygen
Run Code Online (Sandbox Code Playgroud)

然后在您的服务器/桌面上复制密钥:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:
Run Code Online (Sandbox Code Playgroud)

就这样。再也不会要求您输入密码。

我还建议在一般情况下删除密码授权,但这取决于您。

  • 感谢您参考 ssh-copy-id!我曾经使用一些像``sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"` 这样的装置,但这个程序是更干净,使意图明确。 (2认同)

小智 8

我从~/.local/bin目录中使用这个脚本

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi
Run Code Online (Sandbox Code Playgroud)

这允许我#PS <password>.ssh/config文件中指定密码。

但是,正如大家说,这是更好地利用ssh-keysssh-agent当它是可能的

  • 多么棒的主意啊!我偶尔必须从第三方控制的 SFTP 服务器下载文件,他们会分发用户 ID/密码凭据,并且由于我不控制服务器,因此我不需要使用公钥。 (2认同)