鉴于以下所有内容都存在,我很难找到有关 OpenSSH 客户端尝试使用私钥对服务器进行身份验证的顺序的正确文档:
~/.ssh,例如~/.ssh/id_rsa,~/.ssh/config,ssh-agent.是否总是尝试所有这些位置(前提是主机与 中的条目匹配~/.ssh/config),以及按什么顺序?
背景:我有~/.ssh/id_rsa它只能用于对服务器A进行身份验证,并且我有另一个管理的密钥ssh-agent只能用于对服务器B进行身份验证。当试图ssh给乙,认证失败,显然是因为仅 ~/.ssh/id_rsa是尝试。尝试由 管理的密钥似乎没有后备ssh-agent。
backuppc 服务器能够以 root 身份登录远程机器并备份它们,但是如果我以 backuppc 用户身份登录并尝试使用相同的密钥 ssh 进入这些机器,则该密钥将被拒绝,并显示以下调试输出:
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /var/lib/BackupPC/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to XXX.XXXXXX.com [XX.XXX.XX.XX] port 222.
debug1: Connection established.
debug1: identity file /var/lib/BackupPC/.ssh/identity type -1
debug1: identity file /var/lib/BackupPC/.ssh/identity-cert type -1
debug3: Not a RSA1 key file /var/lib/BackupPC/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace …Run Code Online (Sandbox Code Playgroud) 我正在远程服务器上工作,我需要使用我的私钥从另一台服务器进行 git clone。但我不想将我的密钥存储在远程服务器上。
我想完全避免将 ssh 密钥存储在远程服务器上,即使是在临时文件中。这可能吗?
是否可以使用代理转发排除所有密钥的转发,特别说明的除外?或者,是否有任何方法可以指定每个会话尝试密钥的顺序?
使用ssh-agent需要管理不同的套接字:https : //superuser.com/questions/357602/use-a-specified-key-from-ssh-agent/401737#comment396923_358604
有没有更容易配置的替代代理?
例如:
Client A --> ssh/agent-forwarding --> Server B --> Server C
|
------> Server D
Run Code Online (Sandbox Code Playgroud)
我想在代理转发中只允许一个键,允许:A -> B -> C,而不是A -> B -> D。或者至少指定尝试密钥的顺序。
(在@jeff-ferland 回答之后为清晰起见进行了编辑。)
我正在尝试使用 SSH 或 SFTP 登录到远程计算机。
ssh u-indgo@ssh1.eu1.frbit.comCLI 时,它不会响应。我得到一个空的新行,我可以在其中输入字符,但仅此而已。SFTP使用相同的凭据(我Transmit用作我的 SFTP 客户端)进行连接时,它会永远挂起并且无法连接。没有错误。没有反应。
该问题并非特定于frbit.com我尝试连接的任何其他服务器,并且仍然存在。
使用 -vv 标志运行 ssh 客户端,我得到以下输出:
debug1: Reading configuration data /Users/matanya/.ssh/config
debug1: Reading configuration data /usr/local/Cellar/openssh/6.1p1/etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to ssh1.eu1.frbit.com [46.137.57.195] port 22.
debug2: fd 3 setting O_NONBLOCK
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug1: identity file /Users/matanya/.ssh/id_rsa type 1
debug1: identity file /Users/matanya/.ssh/id_rsa-cert type -1
debug1: identity file /Users/matanya/.ssh/id_dsa type 2
debug1: …Run Code Online (Sandbox Code Playgroud) 我在配置 SSH 服务器时遇到问题,无法使用公钥登录,无需密码。
tail -f /var/log/auth.log 给出
Feb 6 14:56:06 ubuntu sshd[24654]: rexec line 26: Deprecated option RhostsAuthentication
Feb 6 14:56:28 ubuntu sshd[24654]: Invalid user mpsd from ip.ip.ip.ip
Feb 6 14:56:28 ubuntu sshd[24654]: input_userauth_request: invalid user mpsd [preauth]
Feb 6 14:56:28 ubuntu sshd[24654]: error: Received disconnect from ip.ip.ip.ip: 14: No supported authentication methods available [preauth]
Run Code Online (Sandbox Code Playgroud)
我已经检查过 /home/mpsd/.ssh 有 700 和 /home/mpsd/.ssh/authorized_keys 有 600 权限。authorized_keys 包含在我的远程 Windows 机器上生成的 rsa 公钥。我的 sshd_config 读取
Port 22
# Use these options to restrict which …Run Code Online (Sandbox Code Playgroud) 如果我在启用代理转发的情况下通过 SSH 访问,是否可以targethost访问我的 SSH 密钥代理?jumphostjumphost
ssh -A -J user1@jumphost user2@targethost
Run Code Online (Sandbox Code Playgroud)
如果我不完全信任,这仍然安全吗jumphost?
我正在尝试通过远程服务器上的 ssh 连接到 github(运行 Ubuntu 22.04)。
在我的本地计算机(运行 Win 10)上,我有~/.ssh/config以下文件:
Host remote
HostName SERVER_IP
port 22
User ubuntu
ForwardAgent yes
Run Code Online (Sandbox Code Playgroud)
连接到远程服务器后,我可以通过键入以下内容来确认 ssh 代理正在工作:
echo "$SSH_AUTH_SOCK"
结果:/tmp/ssh-XXXXPWEKZo/agent.1073
我还ssh-add -l看到密钥已添加
4096 SHA256:hvGuLtIuwYi2LAnQ0KdC/9IgdBUmlHZer0NyXUXd5aY C:\Users\user/.ssh/id_rsa (RSA)
在/etc/ssh/sshd_config我已允许代理转发AllowAgentForwarding yes
但是当我尝试连接到 github ssh -T git@github.com -vvv(密钥已添加到 github 设置中)时,我得到以下信息:
OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug3: …Run Code Online (Sandbox Code Playgroud) 我以前曾经工作过一次,但由于某种原因它无法在我的新系统上工作。
我有.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 配置为使用 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 样式的私钥。