我有一台必须通过 ssh 频繁访问的服务器,因为我在它上面进行计算。现在,计算中心明确禁止SSH 密钥,因为它们“不安全”。他们认为每次在键盘上输入我的密码,可能在其他人面前,是一种更安全的登录方式。
现在; 我无法改变他们的想法(我试过了)。
有没有办法至少临时存储 SSH 密码,就像 GIT 可以在某个定义的时间内将密码存储在缓存中的方式?
use*_*686 65
SSHv2 允许同一个经过身份验证的连接建立多个“通道”——交互式 shell、批处理命令、SFTP,以及次要的连接,例如代理转发或 TCP 转发。您的服务器可能默认支持连接多路复用。(如果您的管理员抱怨,它不会在任何地方缓存您的密码 - 它会缓存整个连接。)
在OpenSSH你有ControlMaster和ControlPath选项(-M和-S)来利用这一点:
使用 启动“主”SSH 连接-M。(因为你没有在你的配置一了ControlPath的是,你需要使用命令行来指定它-S它需要长住,所以我加入。-fN选项降至背景;他们是技术上可选其他方式)
$ ssh foo@bar.example.com -fNMS ~/.ssh/bar.socket
foo@bar.example.com's password:
Run Code Online (Sandbox Code Playgroud)
你回到了本地 shell。
通过 master 开始一个新的连接:
$ ssh foo@bar.example.com -S ~/.ssh/bar.socket
Run Code Online (Sandbox Code Playgroud)
你在。
为了使这对 Git/rsync/SFTP 有用,您需要ControlPath在配置中进行设置,因为您无法始终指定-S:
Host *
ControlPath ~/.ssh/S.%r@%h:%p
Run Code Online (Sandbox Code Playgroud)您可以自动执行此操作——最近的 OpenSSH 版本也可以ControlPersist自动在后台建立主连接(如果还没有的话)。这使您可以跳过第 1 步并像往常一样使用ssh。
配置~/.ssh/config:
Host *
ControlPath ~/.ssh/S.%r@%h:%p
ControlMaster auto
ControlPersist 15m
Run Code Online (Sandbox Code Playgroud)第一次连接要求输入密码:
$ ssh foo@bar.example.com
foo@bar.example.com's password:
[foo@bar:~]$ exit
Run Code Online (Sandbox Code Playgroud)第二个没有:
$ ssh foo@bar.example.com
[foo@bar:~]$ yay
Run Code Online (Sandbox Code Playgroud)要控制 Multiplex 主机(停止它或配置 TCP 转发),请使用该-O选项。
最近的 PuTTY 版本支持类似的方法。
mar*_*elm 19
sshpasssshpass ( github , man page ) 是一种自动将密码提供给 ssh 的工具。使用它的安全方法是这样的:
% echo 'correct horse battery staple' > ~/.ssh/compute_password
% chmod go-rw ~/.ssh/compute_password
% sshpass -f ~/.ssh/compute_password ssh foo@host
Run Code Online (Sandbox Code Playgroud)
这将从 中读取密码~/.ssh/compute_password,就像没有密码短语的私钥文件一样。您可以将sshpass命令放在一个小的 shell 脚本或 shell 别名中,以避免键入完整的命令。可悲的是,我还没有找到从~/.ssh/config.
(也可以直接在命令行上将密码指定为sshpass,但应避免这样做,因为它会将密码泄露给任何可以这样做的人ps)
这种方法当然不如正确设置公钥身份验证安全,但您可能已经知道了。
它也比@grawity 关于连接重用的答案更不安全,但它的优点是根本不必以交互方式输入密码。
您可以将@grawity 的答案视为具有密码短语和私钥缓存(即ssh-agent)的公钥身份验证的替代方法。那么我的答案将是公钥身份验证的替代方法,而私钥文件上没有密码。
| 归档时间: |
|
| 查看次数: |
6130 次 |
| 最近记录: |