🐧在Linux上通过代理服务器(跳转)连接到SSH和SCP的4种方法

在本教程中,我们将学习如何通过代理服务器(跳转主机)使用SSH或SCP。

本指南的发起人是 Bukh Global

通过代理的SCP

方法1:将scp与ProxyJump一起使用

在openssh软件包7.4p1-11或更高版本中,我们可以使用该选项 代理跳转 使用代理服务器传输文件。

代理文件传输的scp命令语法为:

# scp -o "ProxyJump <User>@<Proxy-Server>" <File-Name> <User>@<Destination-Server>:<Destination-Path>

例如:

# scp -o "ProxyJump [email protected]" dataFile.txt  [email protected]:/tmp
[email protected]'s password: 
[email protected]'s password: 
dataFile.txt

我的代理服务器是10.23.100.70,目标服务器是192.168.10.100。

方法2:将scp与ProxyCommand一起使用

SCP使用ssh作为其主要协议,因此我们可以将ssh选项与scp命令一起使用。

设置SSH使您的生活更轻松

在scp命令中使用ProxyCommand选项的语法是:

# scp -o "ProxyCommand ssh <user>@<Proxy-Server> nc %h %p" <File-Name> <[email protected]<Destination-Server>:<Destination-Path>

哪里:

  • %h将被替换为主机名以进行连接
  • %p将替换为port

使用ProxyCommand参数时,请确保在提供nc命令的代理上安装了nmap-ncat软件包,否则将显示以下错误消息。

bash: nc: command not found
ssh_exchange_identification: Connection closed by remote host
lost connection

例如:

# scp -o "ProxyCommand ssh [email protected] nc %h %p" dataFile.txt  [email protected]:/tmp
[email protected]'s password: 
[email protected]'s password: 
dataFile.txt                                                                                     100%    5     0.0KB/s   00:00

我的代理服务器是10.23.100.70,目标服务器是192.168.10.100。

通过代理服务器进行SSH

方法1:使用ssh参数传递ProxyCommand

我们可以再次使用ProxyCommand使用代理服务器ssh登录另一台服务器。

通过代理进行SSH的语法如下:

# ssh -o "ProxyCommand ssh [email protected]_or_IP_of_proxy nc %h %p" [email protected]_or_IP_of_server

示例:以root用户身份在192.168.10.100上通过代理在10.23.100.70上使用proxy_user的代理凭据登录

# ssh -o "ProxyCommand ssh [email protected] nc %h %p" [email protected]
[email protected]'s password: 
[email protected]'s password: 
Last login: Tue Dec 24 10:40:33 2019 from 10.23.100.70

# ip a l | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.10.100/24 brd 192.168.1.255 scope global eth0

如果代理服务器上未安装nc命令,或者您没有代理登录凭据,但是在代理服务器上正在运行接受SSH连接的代理服务(例如squid),则可以使用以下命令。

请注意,此方法要求您在本地/客户端系统上安装nc命令。

# ssh -o "ProxyCommand nc --proxy hostname_or_IP_of_proxy:proxy_service_port --proxy-type http %h %p" [email protected]_or_IP_of_server

例如,要通过代理服务以192.168.10.100的root用户身份登录,侦听10.23.100.70的端口3128。

代理服务不需要任何凭据。

# ssh -o "ProxyCommand nc --proxy 10.23.100.70:3128 --proxy-type http %h %p" [email protected]
[email protected]'s password: 
Last login: Tue Dec 24 10:40:46 2019 from 10.23.100.70

# ip a l | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.10.100/24 brd 192.168.1.255 scope global eth0

方法2:使用ssh客户端配置文件

我们详细讨论了SSH客户端配置文件

🐧如何检查您的OpenSSH客户端配置

🐧如何为每个Linux主机使用SSH配置

因此,除了提供所有选项作为SSH的输入参数之外,我们还可以使用SSH客户端配置文件。

编辑〜/ .ssh / config文件,如下所示:

# vim ~/.ssh/config 
...
Host <nickname>
HostName <hostname_of_server>
User <user_on_server>
ProxyCommand ssh <user_on_server>@<proxy_server> nc %h %p

如果此文件已包含内容,则需要在文件末尾添加以上内容。

哪里:

  • <昵称>:设置目标服务器的别名。
  • :设置远程服务器/主机的真实名称
  • :目标服务器上存在的真实用户
  • :代理服务器的IP或主机名
  • %h将被替换为主机名以进行连接
  • %p将替换为port

然后,您可以使用带有附加详细参数的SSH来检查配置

# ssh -vvv <target_server>

结论

在本教程中,我们了解了使用另一种代理通过SSH通过SSH连接到Linux服务器或通过dproxy服务器或跳转主机使用SCP传输文件的各种方法。

您可以通过任何代理服务(例如squid或任何其他代理)将ProxyCommand或ProxyJump与ssh一起使用,并将scp与ssh一起使用。

Sidebar