标签: ssh-agent

在 KDE 中使用 ssh-agent?

我以前曾经工作过一次,但由于某种原因它无法在我的新系统上工作。

我有.kde4/Autostart/一个名为 ssh-agent 的符号链接01-sshagent,然后是一个名为的简单脚本02-sshkeys,如下所示:

/usr/bin/ssh-add $(find $HOME/.ssh/keys -type f | egrep -v '\.pub$')
Run Code Online (Sandbox Code Playgroud)

问题似乎是,当我启动时,ssh-agent 运行正常,但 KDE 不会保留输出并将其存储在环境中,因此对于每个 Konsole 会话,我必须运行以ps查找 PID,然后手动类型:

SSH_AUTH_SOCK=/tmp/ssh-YtvdiEtW3065/agent.3065; export SSH_AUTH_SOCK;
SSH_AGENT_PID=<pidnumber>; export SSH_AGENT_PID;
Run Code Online (Sandbox Code Playgroud)

...只是为了让它工作,它确实...就在那个 Konsole 窗口中。

我尝试删除上述符号链接,并让 ssh 脚本看起来像这样:

/usr/bin/ssh-agent | sh
/usr/bin/ssh-add $(find $HOME/.ssh/keys -type f | egrep -v '\.pub$')
Run Code Online (Sandbox Code Playgroud)

但是,代理变量并不在会话中,并且从未提示我输入密钥的密码。

我显然错过了一些东西,但它是什么?

ssh kde ssh-agent

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

ssh 代理转发失败并显示“无法打开与您的身份验证代理的连接”

Could not open a connection to your authentication agent当我尝试使用-AOpenSSH 客户端的代理转发选项 ( )从中间服务器连接到第三台服务器时收到错误消息。使用加载到ssh-agent. 尝试连接到最终服务器时会显示错误消息。

我的 OpenSSH 客户端设置为允许使用ForwardAgent yesin转发,~/.ssh/config中间服务器AllowAgentForwarding yes在守护进程的配置文件中。客户端配置不会被系统级文件覆盖。

我没有使用终端多路复用器,以避免因未设置环境变量而导致错误。要运行代理,我使用exec ssh-agent zsh和验证两个SSH_AUTH_SOCKSSH_AGENT_PID存在于当地的环境。我用来ssh-add分别为中间服务器和最终服务器添加私钥;我验证它们添加了ssh-add -l.

所有服务器都是最新版本 (OpenSSH 5.3),客户端是 OpenSSH 6.2。

permissions ssh ssh-agent

6
推荐指数
1
解决办法
4377
查看次数

强制使用 gpg-key 作为给定服务器的 ssh-key

我将 ssh 配置为使用 GPG 作为我的 ssh 代理,如果我删除了该~/.ssh文件夹,我可以使用我的 gpg 密钥通过 ssh 进入我的服务器。但是,我的~/.ssh文件夹中有十多个不同的 ssh 密钥,如果我在它存在时尝试 ssh,我会收到权限被拒绝错误,因为我的 ssh 客户端在尝试密钥之前提供了目录中的每个私钥gpg SSH 代理。

使用常规 ssh 密钥,我只使用文件中的IdentityFile配置~/.ssh/config,但我不能这样做,因为我的身份是 gpg cardno。我很困惑为什么 ssh 更喜欢密钥文件而不是代理。有没有办法强制 ssh 使用代理而不是文件?或者更好的是,有没有办法在~/.ssh/config文件中指定gpg 密钥必须用于给定服务器?

我已经确认ssh-agent没有运行并且gpg-agent正在运行并ssh-add -L显示我的 gpg 密钥存在,以及一个其他 ssh 样式的私钥。

ssh gpg pgp ssh-agent

6
推荐指数
1
解决办法
1860
查看次数

使用转发的密钥从远程 ssh 服务器进行 rsync

语境

我正在编写一个同步脚本来同步一些网络环境。

例如:从生产更新集成(主要是为了获取新的数据库行和上传的文件)

我的一些先决条件是:

  • 开发人员将从集成服务器使用此脚本
  • 需要 DSA 密钥才能连接到生产服务器
  • 集成服务器无法存储开发者的私钥

我希望开发人员连接到集成ssh -A以允许脚本使用他们的密钥连接到生产服务器:

+-------------+    SSH     +-------------+   rsync   +-------------+
| Developer   | ---------> | Integration | --------> |  Production |
|  computer   |            |   Platform  | <-------- |   platform  |
+-------------+            +-------------+           +-------------+
(priv DSA key)              (pub DSA key)             (pub DSA key)
Run Code Online (Sandbox Code Playgroud)

它适用于sshor scp,但我无法让 rsync 使用转发的密钥连接到生产服务器。

我看到了类似的问题,但是 rsync 是从用户的计算机运行的,因此 ssh 密钥文件可能会被-i选项指向。

我担心的不是密码短语,因为此脚本将由真实用户(不是 cron)运行

我试图像这样将远程 shell 指定为 rsync:

rsync -e "ssh -A" user@production

但没有运气。

ssh rsync ssh-agent

5
推荐指数
1
解决办法
3612
查看次数

ssh - 从 ssh-agent 检索公钥

我正在寻找一种从身份验证代理中提取公钥的方法。在将密钥添加到 ssh-agent ( ssh-add ~/.ssh/id_rsa)后,我希望能够将公钥写入文件。

ssh-add -l 为我显示指纹,但有没有办法获得完整的公钥?

谢谢你的建议

ssh-keys ssh-agent

5
推荐指数
1
解决办法
3711
查看次数

强制 ssh 使用代理,而不直接访问 IdentityFile

公司政策要求安全存储一些 ssh 密钥,例如存储在专用 USB 设备上。使用 gnupg 和 来使用未存储在主机上的密钥可以完美地工作enable-ssh-support,即使使用多个密钥时也是如此:

Host example.com
    HostName ssh.example.com
    IdentityFile ~/.ssh/smartcard.pub
Host example.net
    HostName git.example.net
    IdentityFile ~/.ssh/another-smartcard.pub
Host example.org
    HostName sftp.example.org
    IdentityFile ~/.ssh/id_rsa.pub

IdentitiesOnly yes
PasswordAuthentication no
PubkeyAuthentication yes
Run Code Online (Sandbox Code Playgroud)

但是,当拔掉硬件时,gpg 会从代理中删除密钥,随后的 ssh 调用会导致:

Enter passphrase for key '/home/user/.ssh/smartcard.pub':
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,因为 ssh 和 ssh-agent 都应该清楚该文件仅包含公钥。如果 ssh 无法访问指定的密钥,是否有一种好方法可以让 ssh 详细失败,而不是要求输入(毫无意义的)密码?

不完整的解决方案:

  1. 删除IdentitiesOnly- ssh 然后将按预期尝试所有可用密钥- 但会导致服务器限制每个会话的身份验证尝试出现问题
  2. 以某种方式包装 ssh alias ssh='grep ^4096 <(ssh-add -l)' && ssh'- 有效,但如果有人想找出他的 ssh 设置被破坏的原因,则会引起头痛

ssh gpg ssh-keys ssh-agent

5
推荐指数
1
解决办法
1605
查看次数

SSH 转发的哪一部分设置了 SSH_AUTH_SOCK?

我正在尝试让 SSH 代理从我的 Mac 转发到 Debian 服务器。在我的 Mac 上,我已确认我拥有:

  • SSH_AUTH_SOCK 存在
  • ssh-add -l 显示我的身份
  • ./ssh/config 具有启用 ForwardAgent 的设置

无密码登录远程服务器工作正常。但是,那里没有我的身份,并且 SSH_AUTH_SOCK 为空。

我想了解这是如何在远程环境中设置的,以及我缺少什么才能使其工作?

更新:

我的服务器是AllowAgentForwarding=yes在 sshd_config 和ForwardAgent=yesssh_config 中设置的。

我找到了一些建议运行的教程,所以我尝试了,但我怀疑这是针对客户端机器的。当我在我的服务器上运行它时,它确实设置了一个 SSH_AUTH_SOCK,但它似乎没有连接回客户端代理,并且显示“代理没有身份”。eval ``ssh-agent

ssh forwarding ssh-agent

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

SSH:防止在 ssh-agent 身份验证失败时询问密码

我正在编写一个脚本来循环浏览已知主机名的列表,以便找到一个可以使用我的 SSH 密钥进行身份验证的工作 SSH 服务器。

密钥已经加载ssh-agentand ssh-add,因此如果我连接到知道我的密钥的工作远程主机,则不会提示密码,并且我无需任何交互即可成功连接。

事情是,当远程主机不知道我的密钥时,ssh会用密码提示我(它没有机会成功,因为如果可以的话,由于 ,它已经让我登录了ssh-agent)。我想防止这种行为并sshssh-agent身份验证失败时中止。

我目前正在使用以下命令绕过大部分交互,但我无法阻止我刚刚描述的交互:

$ ssh -i ~/.ssh/id_rsa                      \
      -o UserKnownHostsFile=/dev/null       \
      -o KbdInteractiveAuthentication=no    \
      -o StrictHostKeyChecking=no           \
      -o PreferredAuthentications=publickey \
      -o ConnectTimeout=1                   \
      $host -n "whoami"
Run Code Online (Sandbox Code Playgroud)

感谢您的回答。

ssh passphrase ssh-agent

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

如何默认将 SSH 代理连接转发到不合格的主机名?

我的 resolv.conf 搜索顺序中有许多本地域。当我连接到不合格(没有 DNS 后缀)主机名时,我非常希望默认转发 SSH 代理。我能想到的最好的办法是 ~/.ssh/config 中的以下内容:

Host *.edu
    ForwardAgent no
Host *.com
    ForwardAgent no
Host *.net
    ForwardAgent no
Host *.org
    ForwardAgent no
Host *
    ForwardAgent yes
Run Code Online (Sandbox Code Playgroud)

除了列出我仍然想转发的 edu/com/net/org 的已知后缀,例如 .srv.example.com。

对于具有主机命名前缀约定(例如用于 Fedora 系统的 fc-*)的站点,一个简单的通配符条目可以与它们匹配,但这不适用于通用名称或无前缀名称。

有没有比上面丑陋的黑客更好的方法来做到这一点?

linux ssh ssh-agent

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

每次登录时 ssh-agent 进程如何增加

我在 .bashrc 文件中添加了以下行,以启动 ssh-agent(如果它未运行)。

if [ -z "$SSH_AUTH_SOCK" ];then eval `ssh-agent -s`;ssh-add ~/.ssh/my_private_key;fi
Run Code Online (Sandbox Code Playgroud)

但每次我再次登录时,ssh-agent 进程的数量都会增加如何避免这种情况。请查看以下日志并告诉我做错了什么。

[vm@localhost ~]$ ssh root@192.168.x.x
Last login: Wed Feb 15 06:32:07 2017 from x.x.x.x
[root@server ~]#  pgrep ssh-agent | wc -l
2
[root@server ~]# exit
Shared connection to x.x.x.x closed.

[vm@localhost ~]$ ssh root@192.168.x.x
Last login: Wed Feb 15 06:32:20 2017 from x.x.x.x
[root@server ~]#  pgrep ssh-agent | wc -l
3
[root@server ~]# exit
Shared connection to x.x.x.x closed.

[vm@localhost ~]$ ssh root@192.168.x.x
Last login: Wed …
Run Code Online (Sandbox Code Playgroud)

ssh ssh-keys ssh-agent

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

标签 统计

ssh-agent ×10

ssh ×9

ssh-keys ×3

gpg ×2

forwarding ×1

kde ×1

linux ×1

passphrase ×1

permissions ×1

pgp ×1

rsync ×1