我不知道我在这里做什么,所以如果你能帮助我,请记住这一点!
我正在尝试通过代理连接到我的虚拟服务器,但我无法连接,它只是挂起。我假设这是因为它没有通过我们的代理。
我在家里尝试了完全相同的东西,它完美无缺。我在OSX上运行使用终端连接。
有人可以告诉我如何通过SSH获取代理吗?
答案 0 :(得分:51)
以下是理查德·克里斯滕森的答案如何做单行,不需要文件编辑(用你自己的设置替换大写,PROXYPORT经常是80):
ssh USER@FINAL_DEST -o "ProxyCommand=nc -X connect -x PROXYHOST:PROXYPORT %h %p"
您也可以为scp使用相同的-o ...
选项,请参阅https://superuser.com/a/752621/39364
如果你在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
答案 1 :(得分:22)
如果要经常使用SSH代理连接,则不必每次都将它们作为参数传递。您可以将以下行添加到~/.ssh/config
Host foobar.example.com
ProxyCommand nc -X connect -x proxyhost:proxyport %h %p
ServerAliveInterval 10
然后连接使用
ssh foobar.example.com
来源:
http://www.perkin.org.uk/posts/ssh-via-http-proxy-in-osx.html
答案 2 :(得分:17)
我使用-o "ProxyCommand=nc -X 5 -x proxyhost:proxyport %h %p"
ssh选项通过OSX上的socks5代理连接。
答案 3 :(得分:8)
@rogerdpack 对于Windows平台,很难找到带-X(http_proxy)的nc.exe,但是,我发现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可以做一个完美的工作
答案 4 :(得分:2)
$ 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
答案 5 :(得分:1)
ProxyCommand nc -proxy xxx.com:8080 %h %p
删除-X connect
并改用-proxy
。
为我工作。
答案 6 :(得分:1)
我使用proxychains ssh user@host
;来自proxychains-ng(请参阅https://github.com/rofl0r/proxychains-ng)。
默认情况下,它在127.0.0.1:9050使用socks4代理,但是可以在conf文件/etc/proxychains.conf
中进行更改,也可以指定另一个conf文件proxychains -f custom.conf
答案 7 :(得分:1)
我就是这样解决的,希望以后能帮到其他人。
我的系统是 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有不同的版本,比如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。
答案 8 :(得分:0)
在我的情况下,因为我有一个跳转主机或Bastion主机,并且因为这些堡垒节点上的签名已经更改,因为它们被导入到known_hosts文件中,我只需要从以下文件中删除这些条目/行:
/Users/a.abdi-kelishami/.ssh/known_hosts
从上面的文件中删除那些引用堡垒主机的行。
答案 9 :(得分:0)
我在Ubuntu下的.ssh/config
中使用了以下几行(可以用适当的命令行参数替换)
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
)。在第一个视图上,并检查相应的手册页,netcat
和Ubuntu -X
看起来非常相似,特别是在选项-x
和{{1}}方面。
这样,我就没问题了。
答案 10 :(得分:0)
对于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
提取到当前目录中。 SSH,在Git Bash中使用Ncat作为ProxyCommand,并添加了--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支持袜子版本4 / 4a / 5。
要使用ssh在git
命令中使用代理(例如,在使用GitHub时)(假设您在C:\Program Files\Git\
中安装了Git Bash,请打开~/.ssh/config
并添加以下条目:< / p>
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
答案 11 :(得分:0)
对于有问题的命令,尝试-o "ProxyCommand=nc --proxy HOST:PORT %h %p"
。它可以在OEL6上运行,但需要按照OEL7所述进行修改。
答案 12 :(得分:0)
如果有人在 CentOS / RHEL 上得到
nc: invalid option -- 'X'
使用这个 ProxyCommand
ProxyCommand nc --proxy HOST:PORT --proxy-type http %h %p