隧道传输时的SSH主机识别

时间:2020-11-10 17:26:41

标签: ssh hostname tunnel

我有许多设备通过WebSocket连接到服务器,以穿透NAT并等待传入​​连接。在家里,我对NAT也有类似的情况,所以都需要传出连接。

基本上在设备上,我有python脚本可以建立连接

ws://myserver/sshtunIn/deviceID
<-->
localhost:22 

在家里,我有类似的脚本可以显示我的

localhost:9090 
<-->
ws://myserver/sshtunOut/DeviceID 

所以当我想连接第一台设备时,发出:

myscryptPrepareStation ws://myserver/sshtunOut/1stDevice
ssh localhost -p9090

并连接第二台设备,我发出:

myscryptPrepareStation ws://myserver/sshtunOut/2ndDevice
ssh localhost -p9090

因此,第一行仅使用websocket公开端口9090,第二行执行ssh(或scp)。由于两个通话的第二行都相同,因此我收到了警告更改ECDSA的指纹 因为实际设备确实发生了变化。

我尝试将这些行添加到/ etc / host

127.0.0.1 1stdevice 
127.0.0.1 2nddevice

然后使用

ssh 1stdevice -p9090 
ssh 2nddevice -p9090 

,这有效。但是,由于存在许多设备,因此每次更改etc / host都是不切实际的。那么,有什么方法可以使用(临时)不同的localhost或其他方法来管理问题?

2 个答案:

答案 0 :(得分:0)

如果我的问题没错,则说明您正在连接到家庭服务器,该服务器正在更改面向公众的IP,这是因为提供商会像每24小时重置一次租约。因此,警告。

在客户端上,您可以在连接之前从~/.ssh/known_hosts中删除具有先前IP的行。 这样,就不会出现警告。

请确保仅在特定情况下使用您所知道的IP来执行此操作,否则您可能会受到威胁,因为允许中间人对您的VPN进行攻击。

这是另一个具有类似问题/解决方案的问题:

https://serverfault.com/questions/559885/temporarily-ignore-my-ssh-known-hosts-file

请记住,这是非常安全的事情,如果不了解安全隐患,则不建议这样做。

答案 1 :(得分:0)

您可以为设备使用不同的端口。 如果每个设备使用不同的端口(并且同一设备的端口应始终相同),则主机指纹将基于端口进行存储。

您的所有设备都可以单独访问。

我自己使用它,但是设备使用ssh创建隧道。服务器根据设备的mac地址分配端口号(设备在第一个请求上发送mac地址)

device -> server: ssh myserver "GetPort <my MAC Addr>"
Response: If MAC is unknown create a new entry with an unused port number
          Send the desired port number

device -> server: ssh myserver -N -R <AssingedPortNumber>:localhost:22

home->device: ssh -o ProxyJump=myServer user@localhost -p devicePortNumber