我当前的 SSH 情况。
我有几个 SSH 客户端和一个 SSH 服务器。我向客户端部署了一个 autosshserver.script。该脚本创建了一个反向 SSH 隧道(另外它转发了端口 22 和 5900)到服务器。另一方面,我可以通过服务器连接到客户端。
我现在的问题是控制客户端已经使用的端口。我正在寻找一种方法来在服务器上指定这些 PORT_Variables。因此,我总是可以部署相同的脚本,但更改服务器端要在授权密钥中使用的端口(例如)。
这些是来自 autosshscript 的相关片段。
##### VARIABLES ###########################################
PORT_SSH="{{ PORT_SSH }}"
PORt_VNC="{{ PORT_VNC }}"
AUTOSSH="/usr/bin/autossh"
AUTOSSH_PARAMS="-M 0 -f -2 -4 -N -C -n -T -p $HOST_PORT"
AUTOSSH_ADV_PARAMS="-o \"ServerAliveInterval 30\" -o \"ServerAliveCountMax 2\" -o \"ExitOnForwardFailure yes\" -o \"PubkeyAuthentication yes\" -o \"PasswordAuthentication no\" -o \"UserKnownHostsFile /dev/null\" -o \"StrictHostKeyChecking no\""
LOCAL_USER_KEYFILE="-i /home/FOOSSH/.ssh/id_rsa"
TUNNEL="-R 0.0.0.0:$(PORT_SSH):127.0.0.1:22 -R 0.0.0.0:$(PORT_VNC):127.0.0.1:5900"
HOST_LOGIN_USER="FOOSSH"
HOST_NAME="ssh.FOOSSH.eu"
##### LOGIC ###############################################
su -l $LOCAL_USER -m -c "$AUTOSSH \
$AUTOSSH_PARAMS \
$AUTOSSH_ADV_PARAMS \
$LOCAL_USER_KEYFILE \
$TUNNEL \
$HOST_LOGIN_USER@$HOST_NAME"
提前感谢你的帮助。:)
答案1
所以这就是解决方案。不是使用 SSH 内置功能,而是创建一个变通脚本。
脚本的算法:
- diff <(当前本地公钥) <(服务器端公钥) 并阅读注释,它定义了隧道将使用的端口。
- 将变量写入 autossh 脚本。