使用sshpass

使用sshpass

我有一台服务器,需要经常通过 ssh 访问,因为我要在上面进行计算。现在,计算中心明确禁止SSH 密钥,因为它们“不安全”。他们认为每次在别人面前用键盘输入密码是一种更安全的登录方式。

现在;我无法改变他们的想法(我试过了)。

有没有办法至少暂时存储 SSH 密码,就像 GIT 可以在缓存中存储密码一段时间一样?

答案1

连接重用

SSHv2 允许同一个经过身份验证的连接建立多个“通道”——交互式 shell、批处理命令、SFTP,以及代理转发或 TCP 转发等辅助通道。您的服务器可能默认支持连接多路复用。(如果您的管理员抱怨,它不是在任何地方缓存您的密码——而是缓存整个连接。)

使用 OpenSSH 您可以ControlMaster使用ControlPath选项(-M 和 -S)来利用此功能:

  1. 使用 启动“主” SSH 连接-M。(由于您的配置中还没有 ControlPath,因此您需要使用 在命令行中指定它-S。它需要长期存在,因此我添加了-fN要放到后台的选项;否则,它们在技术上是可选的。)

    $ ssh [email protected] -fNMS ~/.ssh/bar.socket
    [email protected]'s password:
    

    您已返回到本地 shell。

  2. 通过主服务器启动新的连接:

    $ ssh [email protected] -S ~/.ssh/bar.socket
    

    你在。

  3. 为了使其对 Git/rsync/SFTP 有用,您需要在配置中进行设置ControlPath,因为您无法-S一直指定:

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
    

您可以自动执行此操作 - 最新版本的 OpenSSH 还具有ControlPersist此功能,如果尚未建立主连接,它会在后台自动建立主连接。这样您就可以跳过步骤 1,只需使用远程控制就像平常一样。

  1. 配置在~/.ssh/config

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlMaster auto
        ControlPersist 15m
    
  2. 第一次连接要求输入密码:

    $ ssh [email protected]
    [email protected]'s password:
    [foo@bar:~]$ exit
    
  3. 第二个没有:

    $ ssh [email protected]
    [foo@bar:~]$ yay
    

要控制多路复用主服务器(停止它或配置 TCP 转发),请使用该-O选项。

类似的方法支持最近的PuTTY版本

答案2

使用sshpass

sshpass(github手册页)是一个自动将密码提供给 ssh 的工具。安全的使用方式如下:

% echo 'correct horse battery staple' > ~/.ssh/compute_password
% chmod go-rw ~/.ssh/compute_password

% sshpass -f ~/.ssh/compute_password ssh foo@host

这将从 读取密码~/.ssh/compute_password,就像没有密码的私钥文件一样。您可以将sshpass命令放在一个小的 shell 脚本或 shell 别名中,以避免输入完整的命令。遗憾的是,我还没有找到从 执行此操作的方法~/.ssh/config

(也可以直接在命令行上指定密码sshpass,但应避免这样做,因为它会将密码泄露给任何可以执行此操作的人ps

与其他方法的比较

当然,这种方法不如正确设置公钥认证安全,但您可能已经知道这一点。

它也比@grawity 关于连接重用的答案安全性更低,但它的优点是根本不需要以交互方式输入密码。

您可以将 @grawity 的答案视为使用密码和私钥缓存的公钥身份验证的替代方案(即ssh-agent)。那么我的答案将是私钥文件上没有密码的公钥身份验证的替代方案。

答案3

使用密码管理器。

一些密码管理器(例如 KeePassXC)具有“自动输入”功能。您将密码存储在密码管理器上,在运行管理器时解锁数据库,每次ssh提示您输入密码时,您按下一个组合键,密码管理器就会将您的长密码写入控制台。

无需复制,记住任何东西(除了解锁数据库的密码),您就可以拥有一个强密码,而不必每次尝试登录时都输入这 30 个字符。

您可以从此列表中选择您最喜欢的: https://en.wikipedia.org/wiki/List_of_password_managers

答案4

另一种选择是使用 GUI ssh 客户端。在 Windows 上,显而易见的选择是油灰。PuTTY 还有一个 Linux 版本,值得注意的是,大多数基于 Debian 的发行版(例如 Ubuntu)通常在其 repo 中包含 PuTTY。

另一个非常好的客户是特米乌斯。它不仅支持 Windows 和 Linux,还支持 OSX、iOS 和 Android。虽然它主要是为手机设计的,但桌面版实际上相当不错。

如果我没记错的话,Windows 上古老的超级终端也内置有 ssh 客户端,但我已经很久没有使用 Windows 了,所以我不是完全确定。

所有 GUI 客户端都具有保存连接设置(包括您的用户名和密码)的功能。

相关内容