Autossh

问题描述


举个栗子:有两台主机,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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容