方法1(在内部使用ssh-key)
如果要保留身份验证流程
local -- authenticate --> inter -- authenticate (ask password) --> final
.ssh / config proxyhost无法完成此操作。
您需要的是bash shell别名(我希望您正在使用bash)。
在中~/.bashrc
,添加以下行
alias ssh-final='ssh -t inter ssh user2@final.com'
在命令提示符下,只需键入以下
ssh-final
final
~/.ssh/config
未使用in节。
连接详细信息(1)
ssh -t inter ssh user2@final.com
可以如下查看
local# ssh inter
inter# ssh user2@final.com
local
只是与“交谈” inter
。local
和之间没有直接或间接的SSH连接final
。local
只是显示的输出ssh user2@final.com
。
方法2(在本地使用ssh-key)
使用相同的ssh-key进行身份验证
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
复制本地 ~/.ssh/id_ras.pub
到
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
连接细节(2)
SSH隧道
在详细介绍之前ProxyCommand
,让我们看下面的示例
步骤1,在终端窗口1上
local# ssh inter -L 2000:final.com:22
步骤2,在终端窗口2
local# ssh localhost -p 2000
在终端1中,在本地端口2000和final.com端口22之间建立了一条隧道。发送到本地端口2000的所有内容都将转发到final.com端口22,反之亦然。
在终端2中,ssh连接到本地端口2000,但实际上正在与final.com端口22(即sshd)通信。
通过隧道,步骤2中的本地ssh客户端直接与final.com sshd连接。
本地端口2000的“输出”是“原始” ssh守护程序流量。
这种隧道的常见用法是访问内部Web服务器或电子邮件服务器。以下是Web服务器的示例
local# ssh inter -L 2000:final.com:80
在浏览器中使用以下URL
http://localhost:2000
隧道的两个端点是本地端口2000和final.com端口80。
进出隧道端点“ AS IS”的流量。让我们称之为“原始”流量。
代理命令
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
在ProxyCommand
把它一步。它跳过了创建本地端口并连接到它的步骤。
ssh客户端将执行后面给出的命令ProxyCommand
,并将该命令的输出视为“原始”流量。它保持本地端点,然后与其建立ssh连接。
为什么一个工作另一个不工作?
以下命令
ssh inter nc final.com 22
基本上是指(1)连接到inter
,然后(2)继续inter
运行命令nc final.com 22
。
nc - arbitrary TCP and UDP connections and listens
因此,nc final.com 22
将连接到final.com端口22,将所有传入流量输出到stdout,并将所有stdin发送到另一端。它是nc stdin / out与final.com端口22之间的“隧道”。
由于nc
是在ssh会话中运行的,因此其所有标准输出都作为“原始”流量传递回ssh客户端。ssh客户端可以将流量传递到nc stdin,它将最终到达final.com端口22。
通过上面的“隧道”,本地ssh客户端将final.com
直接与ssh会话启动。
以下命令
ssh -t inter ssh user2@final.com
ProxyCommand
之所以无法使用,是因为它不是来自ssh守护程序的“原始”流量。它是ssh客户端的标准输出。客户与客户的对话意味着没有生意。
使用不同的SSH密钥进行身份验证(OP原始配置)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
复制本地 ~/.ssh/id_ras.pub
到
/home/user1/.ssh/authorized_keys in `inter`
复制本地 ~/.ssh/id_ras_2.pub
到
/home/user2/.ssh/authorized_keys in `final`
以上两种都将启用以下用法
local# ssh final
额外检查
使用冗长
local# ssh -v final
那应该有助于识别ssh问题。
检查nc
ProxcyCommand
在执行nc
上inter
。检查上是否nc
实际可用inter
。
local# ssh inter
inter# nc final.com 22
检查rsa密钥是否正确设置
如果要为inter
和使用不同的密钥,则final
本地计算机中应存在以下文件
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
由于您可以先切换到inter
,请检查上的按键设置final
。从您的本地机器
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
您应该看到id_rsa_2.pub
那里的内容。
ssh -t
,但是我想要做的是完全模拟我ssh -t
仅通过使用.ssh/config
。