注意:这篇文章不是SSH 远程端口转发失败的重复。这里的问题不是导致端口转发(暂时)失败的原因,我们知道它是什么。问题是如何删除损坏的 sshd 端口绑定。谢谢。
我有一台具有动态 IP 的服务器 A,运行 autossh,以维护到具有静态 IP 的计算机 B 的反向隧道。下面的代码工作正常:
autossh -M 0 -q -N -R2222:localhost:22 -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -o ExitOnForwardFailure yes USER@B -p PORT
Run Code Online (Sandbox Code Playgroud)
然而,当由于 A 的 IP 更改而导致连接崩溃时,需要“很长”的时间(比如一个小时)才能恢复连接。这是因为来自机器 B 的 sshd 仍然监听端口 2222,从而阻止了 ssh(来自机器 A)在崩溃后绑定端口 2222。
B 的 auth.log 包含数十条:
Accepted publickey for USER from A port SOMEPORT ssh2: ED25519 XXXXXXXX
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 2222 …Run Code Online (Sandbox Code Playgroud) 我正在运行带有 OpenSSH 版本 6.7 的 Debian Linux jessie。我在 中使用该AuthenticationMethods指令/etc/ssh/sshd_config。我知道这些字符串被识别AuthenticationMethods:
keyboard-interactive
gssapi-with-mic
password
publickey
Run Code Online (Sandbox Code Playgroud)
在哪里可以找到可与 一起使用的所有有效字符串的列表AuthenticationMethods?(这样的列表不在 的手册页中sshd_config。)
我有一个 Ubuntu 16.04 LTS 虚拟机,我重新启动了它以应用更新,但在尝试通过浏览器控制台连接到 SSH 时出现以下情况:
连接失败 我们无法通过端口 22 连接到虚拟机。
串行输出表明它已正常启动并且可 ping 通。重置没有什么区别。
公司政策要求安全存储一些 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 详细失败,而不是要求输入(毫无意义的)密码?
不完整的解决方案:
IdentitiesOnly- ssh 然后将按预期尝试所有可用密钥- 但会导致服务器限制每个会话的身份验证尝试出现问题alias ssh='grep ^4096 <(ssh-add -l)' && ssh'- 有效,但如果有人想找出他的 ssh 设置被破坏的原因,则会引起头痛清除 SSH 密钥元数据的项目和实例并运行 gcloudcomputessh(这将创建新的密钥对并更新项目元数据)后,如果没有收到“ssh:连接到主机...*”,我将无法再通过 SSH 进行连接。 133 端口 22:连接被拒绝”错误。
我已经阅读了我能找到的所有涉及此问题的论坛,但仍无法找到解决方案。我什至无法通过云外壳终端进行连接。
我所做的事情是否有明显的错误?
Windows 10 现在包含内置的 sshd 服务器。这意味着我应该能够访问位于 Windows 计算机上的 git 存储库
git clone ssh://myid@mywinmachine/myrepos/repo1.git
Run Code Online (Sandbox Code Playgroud)
但是,上面的方法不起作用。我正进入(状态
fatal: ''/myrepos/repo1.git'' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)
我认为问题是,mywinmachine 上的 git 存储库的目录位置存在混乱。
我不知道如何解决这个问题。我的 git 存储库位于 mywinmachine 上的 c:\myrepos\repo1.git (它实际上在另一个位置,但我创建了一个连接)。(我还尝试在 c:\users\myid\myrepos 处建立符号链接(连接点)——也没有帮助。)
当我执行 ssh myid@mywinmachine 时,一切正常。我登录正常,并且被放入 c:\users\myid 机器(进入 cmd 提示符)。
我在 mywinmachine 上设置了 Git Windows,这样就可以从任何命令提示符访问任何 git 命令。因此,在 mywinmachine 上,如果我输入: git --version,我会得到正确的响应
myid@mywinmachine C:\Users\myid>git --version
git version …Run Code Online (Sandbox Code Playgroud) 在我的 /etc/hosts 文件中,有两行:
127.0.0.1 localhost
127.0.1.1 hostname
Run Code Online (Sandbox Code Playgroud)
这两行有什么区别,在哪里可以找到主机名?
我无法通过 SSH 连接到 Google Cloud 服务上的实例。
我不太熟悉虚拟机管理和故障排除,但已经尝试了我所知道的一切,谷歌可以提供给我,包括:
无论我尝试什么,唯一的结果是一个加载符号,后跟以下内容:
到项目元数据的密钥传输花费了异常长的时间。传输到实例元数据可能会更快,但只会将密钥传输到该虚拟机。如果您希望从此虚拟机通过 SSH 连接到其他虚拟机,则需要相应地传输密钥。
我不能这样做,因为我没有 GCloud 用于 SSH 进入实例的私钥,并且使用 PuTTY 根本不起作用,因为我给服务器的任何公钥都不起作用全部。
ssh virtual-machines ssh-keys google-compute-engine google-cloud-platform
我正在尝试在多个 EC2 实例上复制 SSH 公钥。
阅读ssh-copy-id手册页,当您传递密钥文件时,程序会添加.pub扩展名(如果缺少)。
AWS 密钥是按.pem格式生成的,我可以使用此解决方法:
ssh-keygen -y -f my-new-key.pem | ssh user@host \
-i already-on-remote-server-key.pem 'cat > ~/.ssh/authorized_keys'
Run Code Online (Sandbox Code Playgroud)
但疑问仍然存在......是否可以使用ssh-copy-id文件.pem或唯一的解决方案是使用解决方法?
我需要使用 kerberos 票证通过 openssh 从 Windows 连接到 Linux 服务器。我从以下位置获取了 bin 文件: https ://github.com/NoMoreFood/openssh-portable/releases/tag/v7.9-sspi
通过我的公司登录 UI,我使用 MIT Kerberos 获取票证。如果我跑
klist
Run Code Online (Sandbox Code Playgroud)
这是输出
Ticket cache: FILE:C:\Users\Test\....\host.domain.subdomain.local
Default principal: USER@REALM
Valid starting Expires Service principal
09/23/19 16:18:53 09/23/19 19:18:53 krbtgt/REALM@REALM
09/23/19 16:18:56 09/23/19 19:18:53 krbtgt/DOMAIN@REALM
09/23/19 16:18:56 09/23/19 19:18:53 host/host.domain.subdomain.local@DOMAIN
Run Code Online (Sandbox Code Playgroud)
使用 Putty 我没有连接问题。所以我尝试使用 openssh 二进制文件:
ssh -Kvvv USER@HOST
Run Code Online (Sandbox Code Playgroud)
配置文件在哪里
Host HOST
GSSAPIDelegateCredentials yes
GSSAPIAuthentication yes
Run Code Online (Sandbox Code Playgroud)
我到达服务器,但它询问我密码并且不发送 kerberos 票证
这是日志
OpenSSH_for_Windows_7.9p1, LibreSSL 2.6.4
debug1: Reading configuration data C:\\Users\\Test/.ssh/config
debug1: C:\\Users\\Test/.ssh/config line 7: Applying options for …Run Code Online (Sandbox Code Playgroud) ssh ×10
ssh-keys ×3
gcloud ×1
git ×1
gpg ×1
kerberos ×1
localhost ×1
mitkerberos ×1
networking ×1
port ×1
ssh-agent ×1
ssh-tunnel ×1
windows ×1