我想使用中间(堡垒,跳转,网关)服务器SSH到远程专用主机。该命令可以正常工作:
ssh gateway ssh private
使用此〜/ .ssh / config设置:
Host gateway
User gateway-user
HostName XX.XX.XX.XX
RequestTTY force
如何在我的〜/ .ssh / config中实现呢?我尝试了ProxyCommand的无数次迭代,但都没有碰到运气。我想使用网关主机上的身份文件访问私有主机。我希望能够做到:
ssh private
我知道这里描述的技术,但是它要求我的公钥必须在所有私有主机上,但是我不希望这样:
http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/
首先,在网关上配置ssh密钥,以便可以将ssh设置为私有。然后在您的客户端上,创建用于在网关上进行身份验证的单独的私钥/公钥对。例如ssh-keygen -t rsa -f id_gateway
。
然后在网关上,使用command=
您的authorized_keys文件中的语法。例如,您的输入可能如下所示:
command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....
在sshd联机帮助页中搜索以command="command"
获取更多信息。确保将id_gateway.pub密钥添加到此行。然后在您.ssh/config
的客户端上,添加如下条目:
Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway
现在,从您的客户那里您应该可以ssh private
直接进入。这甚至适用于scp
和sftp
。
额外信用
如果要将其用于多台服务器,而只想管理网关上的一个公钥,则可以使用以下技巧。sshd
默认情况下,仅允许从本地环境接收某些变量。其中之一LC_PAPER
是很少用于任何东西。因此,我们可以使用它来传递服务器的主机名,如下所示:
首先,将公共密钥条目更改为
command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...
然后在客户端上,向.bashrc
文件(或使用的任何shell)中添加如下所示的函数:
ssh_proxy() {
LC_PAPER=$1 /usr/bin/ssh $*
}
然后为您添加别名:
alias ssh=ssh_proxy
最后,像上面显示Host
的.ssh/config
那样将部分添加到您的部分。例如:
Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway
现在,你应该能够做到ssh private
,并ssh private2
与网关只是一个公钥。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句