我真的不知道我在这里做什么,所以如果你能帮助我,请记住这一点!
我正在尝试通过代理连接到我的虚拟服务器,但我无法连接,它只是挂起。我假设这是因为它没有通过我们的代理。
我在家里尝试过完全相同的东西,而且效果很好。我在 OSX 上使用终端连接。
谁能告诉我如何使用 SSH 通过代理?
以下是如何将 Richard Christensen 的答案作为单行字进行,无需文件编辑(用您自己的设置替换大写,PROXYPORT 通常为 80):
ssh USER@FINAL_DEST -o "ProxyCommand=nc -X connect -x PROXYHOST:PROXYPORT %h %p"
您也可以对scp使用相同的-o ...
选项,请参阅我的超级用户回答。
如果你在OS X中得到这个:
nc: invalid option -- X
Try `nc --help' for more information.
可能是您不小心使用了netcat的自制版本(您可以通过执行which -a nc
命令来查看——/usr/bin/nc
应该首先列出)。如果有两个,那么一种解决方法是指定所需的 nc 的完整路径,例如ProxyCommand=/usr/bin/nc
...
对于CentOS nc
也有同样的问题invalid option --X
。connect-proxy
是一种替代方案,易于安装使用yum
和工作 -
ssh -o ProxyCommand="connect-proxy -S PROXYHOST:PROXYPORT %h %p" USER@FINAL_DEST
如果要经常使用 SSH 代理连接,则不必每次都将它们作为参数传递。您可以将以下行添加到~/.ssh/config
Host foobar.example.com
ProxyCommand nc -X connect -x proxyhost:proxyport %h %p
ServerAliveInterval 10
然后连接使用
ssh foobar.example.com
我使用-o "ProxyCommand=nc -X 5 -x proxyhost:proxyport %h %p"
ssh 选项通过 OSX 上的 socks5 代理进行连接。
只是对@rogerdpack 回答的一个评论:对于 Windows 平台,很难找到带有nc.exe的文件-X(http_proxy)
,但是,我发现nc可以替换为ncat,完整示例如下:
Host github.com
HostName github.com
#ProxyCommand nc -X connect -x 127.0.0.1:1080 %h %p
ProxyCommand ncat --proxy 127.0.0.1:1080 %h %p
User git
Port 22
IdentityFile D:\Users\Administrator\.ssh\github_key
和ncat--proxy
可以完美地工作。
对于 Windows,@shoaly 参数并不完全适合我。我收到了这个错误:
NCAT DEBUG: Proxy returned status code 501.
Ncat: Proxy returned status code 501.
ssh_exchange_identification: Connection closed by remote host
我想通过 ssh 连接到 REMOTESERVER,而我的网络中的 SSH 端口已关闭。我找到了两个解决方案,但第二个更好。
使用 Ncat 解决问题:
ncat.exe
在带有附加参数的Git Bash中使用 Ncat 作为 ProxyCommand 的 SSH :--proxy-type socks4
ssh -o "ProxyCommand=./ncat --proxy-type socks4 --proxy 127.0.0.1:9150 %h %p" USERNAME@REMOTESERVER
请注意,此 Ncat 实现不支持 socks5。
更好的解决方案:
在 Git Bash 中使用 connect.c 作为 ProxyCommand 的 SSH:
ssh -o "ProxyCommand=connect -a none -S 127.0.0.1:9150 %h %p"
请注意,connect.c 支持 socks 版本 4/4a/5。
要在使用 ssh 的命令中使用代理git
(例如在使用 GitHub 时)——假设您在其中安装了 Git Bash——C:\Program Files\Git\
打开~/.ssh/config
并添加以下条目:
host github.com
user git
hostname github.com
port 22
proxycommand "/c/Program Files/Git/mingw64/bin/connect.exe" -a none -S 127.0.0.1:9150 %h %p
ProxyCommand nc -proxy xxx.com:8080 %h %p
删除-X connect
并-proxy
改用。
为我工作。
$ which nc
/bin/nc
$ rpm -qf /bin/nc
nmap-ncat-7.40-7.fc26.x86_64
$ ssh -o "ProxyCommand nc --proxy <addr[:port]> %h %p" USER@HOST
$ ssh -o "ProxyCommand nc --proxy <addr[:port]> --proxy-type <type> --proxy-auth <auth> %h %p" USER@HOST
我就是这样解决的,希望以后能帮到别人。
我的系统是debian 10,安装最少。
我也有同样的问题。
git clone git@github.com:nothing/nothing.git
Cloning into 'nothing'...
nc: invalid option -- 'x'
nc -h for help
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
或者
git clone git@github.com:nothing/nothing.git
Cloning into 'nothing'...
/usr/bin/nc: invalid option -- 'X'
nc -h for help
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
所以,我知道nc有and之类的不同版本openbsd-netcat
,GNU-netcat
debian中的nc可以改成openbsd的版本,但是我选择了软件之类的corkscrew
,因为系统中nc的两个版本的名字是一样的,而且人多不明白。我的方法如下。
sudo apt install corkscrew
然后。
vim ~/.ssh/config
像这样更改此文件。
Host github.com
User git
ProxyCommand corkscrew 192.168.1.22 8118 %h %p
192.168.1.22
和8118
是我的代理服务器的地址和端口,你应该根据你的服务器地址更改它。
它工作正常。
谢谢@han。
我用proxychains ssh user@host
; 来自proxychains-ng。
默认情况下,它使用socks4代理,127.0.0.1:9050
但可以在 conf 文件中更改它,/etc/proxychains.conf
或者您可以指定另一个 conf 文件,如下所示:proxychains -f custom.conf
我.ssh/config
在 Ubuntu 下的(可以用合适的命令行参数替换)中使用了以下几行
Host remhost
HostName my.host.com
User myuser
ProxyCommand nc -v -X 5 -x proxy-ip:1080 %h %p 2> ssh-err.log
ServerAliveInterval 30
ForwardX11 yes
与 Msys2 一起使用时,安装后gnu-netcat
,文件ssh-err.log
显示该选项-X
不存在。nc --help
证实了这一点,并且似乎表明没有其他选择来处理代理。
所以我安装了openbsd-netcat
(询问后pacman
删除gnu-netcat
,因为它与冲突openbsd-netcat
)。乍一看,检查各自的手册页,openbsd-netcat
和 Ubuntunetcat
似乎非常相似,特别是关于选项-X
和-x
. 有了这个,我连接没有问题。
尝试 -o "ProxyCommand=nc --proxy HOST:PORT %h %p"
有问题的命令。它适用于 OEL6,但需要按照 OEL7 所述进行修改。
在我的情况下,因为我在途中有一个跳转主机或堡垒主机,并且因为这些堡垒节点上的签名在它们被导入 known_hosts 文件后发生了变化,所以我只需要从以下文件中删除这些条目/行:
/Users/a.abdi-kelishami/.ssh/known_hosts
从上面的文件中,删除那些引用堡垒主机的行。
如果有人在 CentOS / RHEL 上得到
nc: invalid option -- 'X'
使用这个 ProxyCommand
ProxyCommand nc --proxy HOST:PORT --proxy-type http %h %p