标签: ssh-agent

ssh-agent 转发和 sudo 到另一个用户

如果我有一个服务器 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)

ssh sudo agent forwarding ssh-agent

177
推荐指数
7
解决办法
9万
查看次数

使用来自 SSH 代理的特定转发密钥?

假设我有一个 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 上引用它?希望我设法解释了这个问题。

ssh ssh-agent

36
推荐指数
2
解决办法
1万
查看次数

SSH:权限被拒绝(公钥、gssapi-with-mic、密码)

================================================== ==================

更新:原来 sshd 的配置host2不允许密码登录。感谢人们回答这个问题。

================================================== ==================

场景:为我的大学项目与一家公司合作。我需要先使用 PuTTy SSH 进入host1,然后从那里 SSH 进入host2(见下文)。我在 host2 上获得了用户名和密码。

我根本无法访问 host2,所以我不知道它的sshd_config.

这是当我试图使用SSH连接发生了什么host2host1

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)

ssh ssh-agent

27
推荐指数
2
解决办法
33万
查看次数

我可以在 Cygwin 的 ssh 中使用 PLink 和 Pageant 吗?

我现在使用 msysgit 是因为 GUI 工具使用 Putty 的 Pageant 和 PLink 实用程序,但我使用 Cygwin 作为通用 SSH 终端。我一直在 Cygwin 上使用 ssh-agent,但这意味着我必须为两个 SSH 密钥管理器输入我的 SSH 密钥密码。是否可以将我所有的 Unix 端口工具(msys、git、cygwin、Ruby Net:SSH 等)配置为使用 PLink/Pageant 而不是 ssh-agent?似乎这就是 PLink 的用途,但我找不到有关如何操作的文档。

ssh cygwin putty ssh-agent

26
推荐指数
4
解决办法
1万
查看次数

从 shell 脚本运行 ssh-agent

我正在尝试创建一个 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 并让它在命令列表中继续移动?

ssh shell bash ssh-agent shell-scripting

23
推荐指数
5
解决办法
4万
查看次数

如何在 Windows Server 启动时将 SSH 密钥添加到 PuTTY 代理?

每次 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

16
推荐指数
1
解决办法
2万
查看次数

SSH ForwardAgent 多跳

在过去的 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我只需要在每个中间系统上调整我的客户端配置。我相信我做到了。

linux ssh ssh-keys ssh-agent

15
推荐指数
1
解决办法
2万
查看次数

按文件名从 ssh-agent 中选择身份

问题:我有大约 20-30 个ssh-agent身份。大多数服务器拒绝使用 进行身份验证Too many failed authentications,因为 SSH 通常不会让我尝试使用 20 个不同的密钥来登录。

目前,我正在手动为每台主机指定身份文件,使用IdentityFileIdentitiesOnly指令,以便 SSH 只会尝试一个有效的密钥文件。

不幸的是,一旦原始密钥不再可用,这就会停止工作。ssh-add -l向我显示每个密钥文件的正确路径,它们与 中的路径匹配.ssh/config,但它不起作用。显然,SSH 是通过公钥签名而不是文件名来选择身份的,这意味着原始文件必须可用,以便 SSH 可以提取公钥。

这有两个问题:

  • 一旦我拔下拿着钥匙的闪存驱动器,它就会停止工作
  • 它使代理转发无用,因为远程主机上没有密钥文件

当然,我可以从我的身份文件中提取公钥并将它们存储在我的计算机上,以及我通常登录的每台远程计算机上。不过,这看起来不是一个理想的解决方案。

我需要的是可以通过文件名从 ssh-agent 中选择一个身份,以便我可以轻松地使用.ssh/config或传递来选择正确的密钥-i /path/to/original/key,即使是在我通过 SSH 连接的远程主机上。如果我可以“昵称”这些键,这样我什至不必指定完整路径,那就更好了。

ssh ssh-keys ssh-agent

12
推荐指数
1
解决办法
3874
查看次数

从另一个非 root 用户访问 SSH_AUTH_SOCK

场景:

我在本地 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 sudo ssh-agent

12
推荐指数
1
解决办法
2605
查看次数

在 ssh 配置中传递密码

有什么方法可以使用 传递密码.ssh/config吗?我正在尝试设置一种以特定用户登录服务器的方法,然后在连接时自动切换到root(需要输入密码)。

现在,我有:

Host server
 HostName hostname.server.com
 User not-root
 Port 1234
 RemoteCommand su
Run Code Online (Sandbox Code Playgroud)
  • 我必须使用这些步骤(用户 - > su)
  • 我必须使用这个密钥(带有密码)

ssh ssh-agent

11
推荐指数
1
解决办法
8万
查看次数