如果我有一个服务器 A,我可以使用我的 ssh 密钥登录,并且我有能力“sudo su - otheruser”,我会丢失密钥转发,因为 env 变量被删除并且套接字只能由我的原始用户读取。有没有一种方法可以通过“sudo su - otheruser”桥接密钥转发,这样我就可以使用转发的密钥(在我的情况下为 git clone 和 rsync )在服务器 B 上做一些事情?
我能想到的唯一方法是将我的密钥添加到其他用户的授权密钥和“ssh otheruser@localhost”,但对于我可能拥有的每个用户和服务器组合来说,这很麻烦。
简而言之:
$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud) 假设我有一个 Github 的密钥以及其他密钥。我ssh-add -L在我的家用电脑 A 上为我的 ssh 代理添加了很多密钥(返回很多行)。在我的.ssh/config我已经设置了哪个密钥用于哪个主机,例如
ssh -T -vvv git@github.com 2>&1 | grep Offering
Run Code Online (Sandbox Code Playgroud)
给
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,只提供了一把钥匙。但是然后使用 ssh-ing 连接到某个主机 BForwardAgent yes并重复相同的命令,我得到
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github
Run Code Online (Sandbox Code Playgroud)
这意味着它会尝试我所有的钥匙。这是有问题的,因为在服务器返回之前只能尝试有限数量的密钥Too many authentication failures。所以我尝试.ssh/config在主机 B 上编辑以包括
Host github.com
IdentityFile /Users/doxna/.ssh/id_rsa.github
IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)
但后来我没有得到关键的产品,而是
debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))
Run Code Online (Sandbox Code Playgroud)
我猜这意味着找不到密钥(?)毕竟,密钥位于我的家用计算机 A 上,而不是主机 B,所以问题是如何在主机 B 上引用它?希望我设法解释了这个问题。
================================================== ==================
更新:原来 sshd 的配置host2不允许密码登录。感谢人们回答这个问题。
================================================== ==================
场景:为我的大学项目与一家公司合作。我需要先使用 PuTTy SSH 进入host1,然后从那里 SSH 进入host2(见下文)。我在 host2 上获得了用户名和密码。
我根本无法访问 host2,所以我不知道它的sshd_config.
这是当我试图使用SSH连接发生了什么host2从host1:
ff@host1:~$ ssh -v host2
OpenSSH_5.1p1 Debian-5, OpenSSL 0.9.8g 19 Oct 2007
debug1: Reading configuration data /home/ff/.ssh/config
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to host2 [192.*.*.*] port 22.
debug1: Connection established.
debug1: identity file /home/ff/.ssh/identity type -1
debug1: identity file …Run Code Online (Sandbox Code Playgroud) 我现在使用 msysgit 是因为 GUI 工具使用 Putty 的 Pageant 和 PLink 实用程序,但我使用 Cygwin 作为通用 SSH 终端。我一直在 Cygwin 上使用 ssh-agent,但这意味着我必须为两个 SSH 密钥管理器输入我的 SSH 密钥密码。是否可以将我所有的 Unix 端口工具(msys、git、cygwin、Ruby Net:SSH 等)配置为使用 PLink/Pageant 而不是 ssh-agent?似乎这就是 PLink 的用途,但我找不到有关如何操作的文档。
我正在尝试创建一个 shell 脚本,其中包括启动 ssh-agent 并向代理添加私钥。例子:
#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
Run Code Online (Sandbox Code Playgroud)
问题在于 ssh-agent 显然启动了 $SHELL 的另一个实例(在我的情况下是 bash),从脚本的角度来看,它执行了所有内容,而 ssh-add 及其下面的任何内容都不会运行。
如何从我的 shell 脚本运行 ssh-agent 并让它在命令列表中继续移动?
每次 Windows 服务器启动时,我都需要向 Putty Agent (pagent.exe) 添加一个私有 SSH 密钥——在用户交互登录之前。密钥将由服务使用。
如果是普通用户需要使用密钥,我只会在启动文件夹中放置一个快捷方式,但是,这在服务器上不起作用,因为没有用户登录。
我在 Windows Server 2008 和 Windows Server 2003 上都需要这个。
我认为这一定是一个非常常见的用例,因为使用 SSH 和 SFTP 进行公钥身份验证变得更加普遍。
windows-server-2003 windows-server-2008 windows-service putty ssh-agent
在过去的 2 个小时里,我一直在寻找解决以下问题的方法,但没有成功。
发展:
我正在使用公钥身份验证连接到我的服务器。我使用 ssh-agent 转发,以便不必管理公钥/私钥。
假设我有服务器A, B and C。
如果我从LOCAL ---> A ---> B.
如果我这样做,它也能很好地工作LOCAL ---> A ---> C。
现在,如果我尝试LOCAL ---> A ---> B ---> C,SSH 无法从B to C.
值得注意的是:我作为流动性连接到服务器 A,而我作为 root 连接到服务器 B。作为流动性连接到服务器 B 解决了这个问题,但这对我来说不是一个选择。
根据用户的建议,我ssh -A每次都使用以确保启用代理转发。
我发现了一个类似的问题,这里没有答案:Is it possible to chain ssh-agent forwarding through multiple hops?
根据这里的@Zoredache:https ://serverfault.com/a/561576/45671我只需要在每个中间系统上调整我的客户端配置。我相信我做到了。
问题:我有大约 20-30 个ssh-agent身份。大多数服务器拒绝使用 进行身份验证Too many failed authentications,因为 SSH 通常不会让我尝试使用 20 个不同的密钥来登录。
目前,我正在手动为每台主机指定身份文件,使用IdentityFile和IdentitiesOnly指令,以便 SSH 只会尝试一个有效的密钥文件。
不幸的是,一旦原始密钥不再可用,这就会停止工作。ssh-add -l向我显示每个密钥文件的正确路径,它们与 中的路径匹配.ssh/config,但它不起作用。显然,SSH 是通过公钥签名而不是文件名来选择身份的,这意味着原始文件必须可用,以便 SSH 可以提取公钥。
这有两个问题:
当然,我可以从我的身份文件中提取公钥并将它们存储在我的计算机上,以及我通常登录的每台远程计算机上。不过,这看起来不是一个理想的解决方案。
我需要的是可以通过文件名从 ssh-agent 中选择一个身份,以便我可以轻松地使用.ssh/config或传递来选择正确的密钥-i /path/to/original/key,即使是在我通过 SSH 连接的远程主机上。如果我可以“昵称”这些键,这样我什至不必指定完整路径,那就更好了。
场景:
我在本地 PC 上运行 ssh-agent,并且我的所有服务器/客户端都设置为转发 SSH 代理身份验证。我可以使用本地 PC 上的 ssh-agent 在所有机器之间跳转。那个有效。
我需要能够以我自己 (user1) 的身份通过SSH 连接到一台机器,更改为另一个名为 user2 的用户(sudo -i -u user2),然后使用我在本地 PC 上运行的 ssh-agent ssh 到另一个盒子。假设我想做一些类似 ssh user3@machine2 的事情(假设 user3 在其 authorized_keys 文件中有我的公共 SSH 密钥)。
我已将sudo配置为保留SSH_AUTH_SOCK环境变量。
所有涉及的用户(用户 [1-3])都是非特权用户(不是 root)。
问题:
当我更改为另一个用户时,即使 SSH_AUTH_SOCK 变量设置正确,(假设它设置为:/tmp/ssh-HbKVFL7799/agent.13799)user2 无权访问由 user1 创建的套接字 - 哪个当然是有道理的,否则用户 2 可能会劫持用户 1 的私钥并以该用户身份跳来跳去。
如果我不是通过 sudo 为 user2 获取 shell,而是通过 sudo 为 root 获取 shell,则此场景工作正常。因为 root 自然可以访问机器上的所有文件。
问题:
最好使用 sudo, …
有什么方法可以使用 传递密码.ssh/config吗?我正在尝试设置一种以特定用户登录服务器的方法,然后在连接时自动切换到root(需要输入密码)。
现在,我有:
Host server
HostName hostname.server.com
User not-root
Port 1234
RemoteCommand su
Run Code Online (Sandbox Code Playgroud)