隧道传输时的SSH主机标识



我有很多设备通过WebSockets连接到服务器,以穿透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

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

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

127.0.0.1 1stdevice 
127.0.0.1 2nddevice

然后使用

ssh 1stdevice -p9090 
ssh 2nddevice -p9090 

这是有效的。但是,每次都更改etc/host是不现实的,因为很多设备都是这样。所以,有没有一些方法可以使用(临时(不同的本地主机或其他东西来管理问题?

如果我解决了你的问题,你正在连接到你的家庭服务器,由于你的提供商每24小时重置一次租约,该服务器正在更改面向公众的IP。因此发出警告。

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

请确保仅在您所知的IP的特定情况下这样做,否则您会因允许中间人攻击您的VPN而陷入危险。

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

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

请记住,这是一件非常安全敏感的事情,如果没有意识到安全隐患,不建议这样做。

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

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

我自己也用过,但设备使用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

最新更新