1. 约定
这里涉及到两台主机,一是执行命令、运行SSH客户端的主机,我们称为本地主机A【Host A】local#
;二是接收连接请求、运行SSH服务器的主机,我们称为远程主机B【Host B】remote#
。
通过密码或密钥等方式验证后,SSH连接建立,主机A可以使用命令行对主机B实施远程控制。
默认本地和远端已经配置好SSH环境。
- user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
- remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
- port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22
2 背景
学校中,每个人都只有一个校园网账号,登录后可以访问外网,假如在本地主机已经登录校园网账号的情况下,再在远程主机登录校园网账号访问外网(下载软件、安装包等等),会将本地挤掉。因此一个好的方法是使用代理,remote需要访问下载的东西,借助local进行转发下载,再返回remote。
3 解决步骤
- 点击账号,进行账号设置;
- 允许范围 —> 允许部分;验证类型 -----> IP地址;点击新建,添加IP保存确定;
- 在设置标签页中可以设置端口;
设置好CCPROXY后,启动软件。
- 在
terminal
通过SSH登录remote端
主机。
# ssh 执行远程命令格式:
ssh [options][remote host][command]
ssh username@hostIP
连接到远程主机后,在终端中直接运行命令:
# 设置代理
export http_proxy=http://ProxyAddress:Port
export https_proxy=http://ProxyAddress:Port
# 查看代理
env | grep proxy
这个办法的好处是简单直接,并且影响面很小(只对当前终端有效,退出就失效),相比修改系统文件,比较方便,并且不影响实验室其它人使用。
为了方便,不用每次登录终端都敲代码设置,设置连接服务器附带多条命令。
ssh username@hostIP [command]
# 例如执行下面两个命令,命令之间用分号隔开
ssh User@Host 'source /etc/profile ; pwd'
但是会出现问题:连接成功后 执行命令,然后会自动退出
解决办法:
ssh username@hostIP -p 22 -o ServerAliveInterval=60 -t 'pwd;/bin/bash;'
解释
-o ServerAliveInterval
:首先-o
是为这个连接添加一个属性(option),那么要添加的属性叫做ServerAliveInterval
,这个属性的作用是client每隔60秒发送一次请求给server,然后server响应,从而保持连接。
-t
:建立这个连接时强制使用伪终端模式,具体效果观者可以试着去掉这个命令对比一下效果。
pwd;/bin/bash;
:这就是我们要执行的命令,首先执行了一个pwd
命令,查看当前的目录,第二命令是重点,执行/bin/bash
命令能够让我们远程执行命令后不自动断开ssh连接。所以解决自动退出的有效方法就是在执行命令最后使用
/bin/bash
;这个命令。
- 配置windows terminal的json脚本时,注意需要加
\
号:
commandline": "ssh username@hostIP -p 22 -t \"export http_proxy=http://ProxyAddress:Port;export https_proxy=http://ProxyAddress:Port;/bin/bash\",