0%

ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
-f 要求 在执行命令前退至后台. 它用于当 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令.

-g 允许远端主机连接本地转发的端口.

-n 把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. 在后台运行. (但是如果 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.)

-N 不执行远程命令. 用于转发端口. (仅限协议第二版)

-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

1. ssh 隧道

1
2
3
4
5
6
7
# 本地转发
ssh -g -f -N -L forwardingPort:targetIP:targetPort user@sshServerIP

# 远程转发 逆向隧道
ssh -f -N -R forwardingPort:targetIP:targetPort user@sshServerIP

ssh -f -v -N -S none -o ControlMaster=no -o ExitOnForwardFailure=yes -o ConnectTimeout=10 -o NumberOfPasswordPrompts=3 -o TCPKeepAlive=no -o ServerAliveInterval=60 -o ServerAliveCountMax=1 root@114.55.127.5 -L 52689:rm-bp18dj01b38saby47.mysql.rds.aliyuncs.com:3306

2. 生成 ssh key

lang=shell
1
ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa

3. 常见问题

3.1. 1. 登录远程主机后中文乱码

提示 bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

原因:
1. 远程主机没有本机的字符集 en_US.UTF-8
2. 本机字符集不支持中文

解决方案:

1
2
3
4
5
# 1. 进入字符集选择页面, 勾选缺失的字符集
sudo dpkg-reconfigure locales

# 2. 让当前会话支持中文
export LC_ALL=zh_CN.UTF-8

4. Resources