ssh远程连接服务器执行命令

ssh远程连接服务器执行命令,第1张

首先说一下使用ssh远程连接服务器执行命令的方法: 为了方便描述,这里把测试服务器称之为A1,目标服务器称之为A2 如果可以直接登录到A2,则配置成功! 下面来说问题: ssh在远程连接服务器执行命令的时候,经常会遇到环境变量的问题,如下: 如果出现上面的提示,则说明环境变量配置有问题。 先来说解决办法 问题解决! 这里就要说明bash有两种方式interactive + login shell模式和non-interactive + non-login shell模式 在服务器上执行命令,走的是interactive + login shell模式,而通过远程登录执行命令,走的是non-interactive + non-login shell模式。 这两种模式对于环境变量的读取是有区别的。 Shell首先会加载/etc/profile文件,然后再尝试依次去加载下列三个配置文件之一,一旦找到其中一个便不再接着寻找: ~/.bash_profile ~/.bash_login ~/.profile 所以当远程执行命令时,我们只需要让~/.bashrc文件中的环境变量与/etc/profile中的环境变量一致即可! 参考:如何解决SSH远程执行命令找不到环境变量的问题

老规矩,先说结论:

或者:

注意:由于 macOS 版 Ncat 的 7.90 和 7.91 版本的 bug,上述方式不再生效。起码 7.91 版本在 macOS 10.15.7 上是不行的。此问题在 7.92 版本中已经解决。

具体原因参见: https://nmap.org/changelog.html

但 Linux 上没问题。所以增加个 socat 的替补方案:

Scout 本身很强大,但对代理的支持这部分貌似差一些,只支持 SOCKSv4 和 HTTP Proxy,不支持 SOCKS5。详情参考 《socat 初窥门径》 。

有些时候,由于网络限制等原因,不能直接连通过 SSH 连到指定服务器,需要经过代理进行连接。例如如下场景:

其中,

client.net 不能直接访问 server.net

client.net 可以访问 proxy.net

proxy.net 可以访问 server.net

使用 SSH 的 ProxyCommand 选项,配合 nc/Ncat 命令,实现 client.net 通过代理 proxy.net ,以 SSH 访问 server.net 。

(1) nc

macOS 上常用这种方案。但是 nc 不支持需要认证的代理。

常用参数:

(2) Ncat

Ncat 在 macOS 上通过代理连接时会出现连接断开的情况。

常用参数:

以 nc 为例,如使用 Ncat 可以自行替换。

默认为 Socket5 代理,这时可以省略 -X 参数

或者采用另一种写法:

SSH 配置文件位置:

增加如下两行内容:以 nc 为例,如使用 Ncat 可以自行替换。

使用配置文件之后,就不需要在命令行中进行代理配置了。

对于大部分情况,都可以直接使用 nc 或者 Ncat 解决。但对于一些复杂情况,也可以通过其它方案完成。如在 macOS 上想通过需要认证的代理连接,用 nc 不支持代理认证, Ncat 又有些问题。

对于代理类型的问题,可以通过 Brook 来进行类型转换。

1、 corkscrew

只支持 HTTP 代理

如需要访问带认证的代理服务器:

~/.ssh/myauth 的内容:

2、 proxytunnel

只支持 HTTP 代理

命令行里只填用户名,会提示输入密码,或者通过环境变量传入。

(完)


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/708966.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-06
下一篇2023-08-06

发表评论

登录后才能评论

评论列表(0条)

    保存