问题描述
举个栗子:有两台主机,A是VPS,B在校园网内。现在想要回家之后也能对校内主机进行操作,即外网访问校内主机B。
A主机(VPS):
外网,root@123.123.123.123
,sshd端口:1234
B主机:
内网,用户名B_username
, sshd端口:2345
(一般ssh的默认端口是22)
Autossh启动!
1. VPS(主机A)
- 修改vps的文件
/etc/ssh/sshd_config
:
GetewayPorts yes
- 同时在VPS的控制台添加安全组规则,开放监听端口(例如
60916
)和映射端口(例如60913
),端口号自己选即可。
2. 内网主机B
- 内网主机B上生成密钥,和VPS(即A)建立认证,即可在内网主机B上免密登录VPS:
$ ssh-keygen
// 这里一顿爆按Enter即可.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 1234 root@123.123.123.123
- 安装autossh:
$ sudo apt-get install autossh
3. 初步实现autossh:
- 在内网主机B上:
$ autossh -p 1234 -M 60916 -NR 60913:localhost:2345 root@123.123.123.123
其中的参数:
-p 1234
: vps ssh 端口,默认值22.
-M 60916
: 中继服务器(vps)的代理服务监听端口,需保证不被vps其它进程占用.
-NR 60913:localhost:2345
: 端口映射,vps的60913
端口映射到内网PC的2345
端口(sshd), 60913即为映射端口.
[root@123.123.123.123]
: vps的用户名及IP.
4. 使autossh成为service:
- 创建并编辑
/lib/systemd/system/autossh.service
:
[Unit]
Description=Auto SSH Tunnel
After=network-online.target
[Service]
User=tye
Type=simple
ExecStart=/usr/bin/autossh -p 1234 -M 60916 -NfR 60913:localhost:2345 -i /home/B_username/.ssh/id_rsa root@123.123.123.123 >> /dev/null 2>&1
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
RestartSec=120
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target
- 对autossh这个service的操作:
重新加载service:$ sudo systemctl daemon-reload
启动服务:$ sudo service autossh start
查看状态:$ sudo service autossh status
开机启动:$ sudo systemctl enable autossh.service
5. 通过VPS登录到内网主机B
$ ssh -p 60913 B_username@123.123.123.123
然后输入B_username的密码就可以啦~
其他
查看端口监听信息 $ ss -ant
Reference
https://blog.csdn.net/hiudawn/article/details/80377095
https://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html
https://juejin.im/post/5c481080f265da6126387669