我有两台被互联网隔开的计算机。我想使用 SSH 隧道将两台计算机从计算机 2 连接到计算机 1,而无需输入密码。
________ ________
| | | |
| | ______ _____ _______ | |
|________|---|______|---|_____|---/ Internet /---|_______|---|________|
/ \ Router Modem Gateway / \
/____________\ /____________\
Computer 1 Computer 2
两台计算机都默认安装了适用于 Windows 的 OpenSSH。路由器正在将端口转发到计算机 1 的端口 22。计算机 1 上有用户 Foo,计算机 2 上有用户 Bar。我可以通过转发的端口从计算机 2 连接到计算机 1,但这要求我使用用户 Foo 及其密码登录。
问题:我是否可以使用 Windows 中不存在的用户连接到计算机 1用户数据库或无需输入 Foo 的密码?我不想在计算机 1 上创建新帐户。
我尝试过使用authorized_keys
方法,但我无法让它工作。我想是因为它们没有相同的网络名称,但我不确定。
请注意,我不想进行任何额外的硬件投资。这是为了轻量级,以便于安装和拆卸。计算机 2 也不应该看到计算机 1 的网络。
额外细节
有关我尝试使用该authorized_keys
方法时发生的情况的更多信息。
在计算机 1 的 bash 终端上,我们得到:
$ ssh -N -L 127.0.0.1:8273:本地主机:2812[电子邮件保护]-p 2344 [电子邮件保护]的密码:
其中 192.xyz 是路由器的 IP。此 shell 运行的用户是 Bar。
计算机2上的日志显示:
10092 2020-04-18 21:35:12.466 debug3:fd 5 不是 O_NONBLOCK 10092 2020-04-18 21:35:12.466 debug3:生成“C:\\Program Files\\OpenSSH\\sshd.exe”-R 10092 2020-04-18 21:35:12.469 debug3:send_rexec_state:输入 fd = 8 配置长度 291 10092 2020-04-18 21:35:12.469 debug3:ssh_msg_send:类型 0 10092 2020-04-18 21:35:12.469 debug3:send_rexec_state:完成 9680 2020-04-18 21:35:12.497 debug1:复制后的 inetd 套接字:4,4 9680 2020-04-18 21:35:12.497 从 66.qrs 端口 50805 连接到 192.abc 端口 22 9680 2020-04-18 21:35:12.498 debug1:本地版本字符串 SSH-2.0-OpenSSH_for_Windows_8.1 9680 2020-04-18 21:35:12.498 debug1:远程协议版本2.0,远程软件版本OpenSSH_8.2 9680 2020-04-18 21:35:12.498 调试1:匹配:OpenSSH_8.2 pat OpenSSH* 兼容 0x04000000 9680 2020-04-18 21:35:12.498 debug2:fd 4 设置 O_NONBLOCK 9680 2020-04-18 21:35:12.511 debug3:生成“C:\\Program Files\\OpenSSH\\sshd.exe”-y 9680 2020-04-18 21:35:12.516 debug2:网络子进程位于 pid 9536 上 9680 2020-04-18 21:35:12.517 debug3:send_rexec_state:输入 fd = 6 配置长度 291 9680 2020-04-18 21:35:12.517 debug3:ssh_msg_send:类型 0 9680 2020-04-18 21:35:12.517 debug3:send_rexec_state:完成 9680 2020-04-18 21:35:12.517 debug3:ssh_msg_send:类型 0 9680 2020-04-18 21:35:12.517 debug3:ssh_msg_send:类型 0 9680 2020-04-18 21:35:12.517 debug3:预认证子监视器已启动 9680 2020-04-18 21:35:12.534 debug1:list_hostkey_types:rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519 [预认证] 9680 2020-04-18 21:35:12.534 debug3:发送数据包:类型 20 [预认证] 9680 2020-04-18 21:35:12.534 debug1:SSH2_MSG_KEXINIT 已发送 [预认证] 9680 2020-04-18 21:35:12.534 debug3:接收数据包:类型 20 [预认证] 9680 2020-04-18 21:35:12.534 debug1:SSH2_MSG_KEXINIT 已收到 [预认证] 9680 2020-04-18 21:35:12.534 debug2:本地服务器 KEXINIT 提议 [预认证] 9680 2020-04-18 21:35:12.534 debug2:KEX 算法:curve25519-sha256,[电子邮件保护],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1 [预认证] 9680 2020-04-18 21:35:12.534 debug2:主机密钥算法:rsa-sha2-512、rsa-sha2-256、ssh-rsa、ecdsa-sha2-nistp256、ssh-ed25519 [预认证] 9680 2020-04-18 21:35:12.534 debug2:密码ctos:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护],[电子邮件保护][预先授权] 9680 2020-04-18 21:35:12.534 debug2:密码存量:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护],[电子邮件保护][预先授权] 9680 2020-04-18 21:35:12.534 调试2:MACs ctos:[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1 [预认证] 9680 2020-04-18 21:35:12.534 debug2:MACs 库存:[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1 [预认证] 9680 2020-04-18 21:35:12.534 debug2:压缩ctos:无,[电子邮件保护][预先授权] 9680 2020-04-18 21:35:12.534 debug2:压缩库存:无,[电子邮件保护][预先授权] 9680 2020-04-18 21:35:12.534 debug2:语言 ctos:[预认证] 9680 2020-04-18 21:35:12.534 debug2:语言存储:[预认证] 9680 2020-04-18 21:35:12.534 debug2:first_kex_follows 0 [预认证] 9680 2020-04-18 21:35:12.534 debug2:保留 0 [预授权] 9680 2020-04-18 21:35:12.534 debug2:对等客户端 KEXINIT 提议 [预认证] 9680 2020-04-18 21:35:12.534 debug2:KEX 算法:curve25519-sha256,[电子邮件保护],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,ext-info-c [预认证] 9680 2020-04-18 21:35:12.534 debug2:主机密钥算法:[电子邮件保护],[电子邮件保护],[电子邮件保护],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],ssh-ed25519,[电子邮件保护],rsa-sha2-512,rsa-sha2-256,ssh-rsa [预认证] 9680 2020-04-18 21:35:12.534 debug2:密码ctos:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护],[电子邮件保护],aes128-cbc,3des-cbc,aes256-cbc,aes192-cbc [预认证] 9680 2020-04-18 21:35:12.534 debug2:密码存量:[电子邮件保护],aes128-ctr,aes192-ctr,aes256-ctr,[电子邮件保护],[电子邮件保护],aes128-cbc,3des-cbc,aes256-cbc,aes192-cbc [预认证] 9680 2020-04-18 21:35:12.534 调试2:MACs ctos:[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1 [预认证] 9680 2020-04-18 21:35:12.534 debug2:MACs 库存:[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],[电子邮件保护],hmac-sha2-256,hmac-sha2-512,hmac-sha1 [预认证] 9680 2020-04-18 21:35:12.534 debug2:压缩ctos:无,[电子邮件保护],zlib [预授权] 9680 2020-04-18 21:35:12.534 debug2:压缩库存:无,[电子邮件保护],zlib [预授权] 9680 2020-04-18 21:35:12.534 debug2:语言 ctos:[预认证] 9680 2020-04-18 21:35:12.534 debug2:语言存储:[预认证] 9680 2020-04-18 21:35:12.534 debug2:first_kex_follows 0 [预认证] 9680 2020-04-18 21:35:12.534 debug2:保留 0 [预授权] 9680 2020-04-18 21:35:12.534 debug1:kex:算法:curve25519-sha256 [预认证] 9680 2020-04-18 21:35:12.534 debug1:kex:主机密钥算法:ecdsa-sha2-nistp256 [preauth] 9680 2020-04-18 21:35:12.534 debug1:kex:客户端->服务器密码:[电子邮件保护]MAC:压缩:无[预认证] 9680 2020-04-18 21:35:12.534 debug1:kex:服务器->客户端密码:[电子邮件保护]MAC:压缩:无[预认证] 9680 2020-04-18 21:35:12.534 debug1:需要 SSH2_MSG_KEX_ECDH_INIT [预认证] 9680 2020-04-18 21:35:12.555 debug3:接收数据包:类型 30 [预认证] 9680 2020-04-18 21:35:12.560 debug3:mm_sshkey_sign 正在进入 [预认证] 9680 2020-04-18 21:35:12.560 debug3:mm_request_send 输入:类型 6 [预认证] 9680 2020-04-18 21:35:12.560 debug3:mm_sshkey_sign:等待 MONITOR_ANS_SIGN [预认证] 9680 2020-04-18 21:35:12.560 debug3:mm_request_receive_expect 输入:类型 7 [预认证] 9680 2020-04-18 21:35:12.560 debug3:mm_request_receive 正在进入 [预认证] 9680 2020-04-18 21:35:12.560 debug3:mm_request_receive 正在进入 9680 2020-04-18 21:35:12.560 debug3: monitor_read: 检查请求 6 9680 2020-04-18 21:35:12.560 调试3:mm_answer_sign 9680 2020-04-18 21:35:12.563 debug3:mm_answer_sign:KEX 签名 0000009666114BD0(99) 9680 2020-04-18 21:35:12.563 debug3:mm_request_send 输入:类型 7 9680 2020-04-18 21:35:12.563 debug2: monitor_read: 6 使用一次,现在禁用 9680 2020-04-18 21:35:12.563 debug3:发送数据包:类型 31 [预认证] 9680 2020-04-18 21:35:12.563 debug3:发送数据包:类型 21 [预认证] 9680 2020-04-18 21:35:12.563 debug2:set_newkeys:模式 1 [预认证] 9680 2020-04-18 21:35:12.563 debug1:在 134217728 个块后重新生成密钥 [预认证] 9680 2020-04-18 21:35:12.563 debug1:SSH2_MSG_NEWKEYS 已发送 [预认证] 9680 2020-04-18 21:35:12.563 debug1:发送 SSH2_MSG_EXT_INFO [预认证] 9680 2020-04-18 21:35:12.563 debug3:发送数据包:类型 7 [预认证] 9680 2020-04-18 21:35:12.563 debug1:需要 SSH2_MSG_NEWKEYS [预认证] 9680 2020-04-18 21:35:12.580 debug3:接收数据包:类型 21 [预认证] 9680 2020-04-18 21:35:12.580 debug1:SSH2_MSG_NEWKEYS 已收到 [预认证] 9680 2020-04-18 21:35:12.580 debug2:set_newkeys:模式 0 [预认证] 9680 2020-04-18 21:35:12.580 debug1:在 134217728 个块后重新输入密钥 [预认证] 9680 2020-04-18 21:35:12.580 debug1:KEX 完成 [预授权] 9680 2020-04-18 21:35:12.646 debug3:接收数据包:类型 5 [预认证] 9680 2020-04-18 21:35:12.646 debug3:发送数据包:类型 6 [预认证] 9680 2020-04-18 21:35:12.660 debug3:接收数据包:类型 50 [预认证] 9680 2020-04-18 21:35:12.660 debug1:用户 Foo 服务的用户身份验证请求 ssh 连接方法无 [预身份验证] 9680 2020-04-18 21:35:12.660 debug1:尝试 0 次失败 0 [预认证] 9680 2020-04-18 21:35:12.660 debug3:mm_getpwnamallow 进入 [预认证] 9680 2020-04-18 21:35:12.660 debug3:mm_request_send 输入:类型 8 [预认证] 9680 2020-04-18 21:35:12.660 debug3:mm_getpwnamallow:等待 MONITOR_ANS_PWNAM [预认证] 9680 2020-04-18 21:35:12.660 debug3:mm_request_receive_expect 输入:类型 9 [预认证] 9680 2020-04-18 21:35:12.660 debug3:mm_request_receive 正在进入 [预认证] 9680 2020-04-18 21:35:12.660 debug3:mm_request_receive 正在进入 9680 2020-04-18 21:35:12.660 debug3:monitor_read:检查请求8 9680 2020-04-18 21:35:12.660 调试3:mm_answer_pwnamallow 9680 2020-04-18 21:35:12.660 debug2:parse_server_config:配置重新处理配置长度 291 9680 2020-04-18 21:35:12.660 debug3:检查“组管理员”用户 foo 主机 66.qrs 地址 66.qrs laddr 192.abc lport 22 的匹配项 9680 2020-04-18 21:35:12.662 debug3:LsaLogonUser 成功(模拟:0) 9680 2020-04-18 21:35:12.662 debug1:用户 foo 在第 89 行匹配组列表管理员 9680 2020-04-18 21:35:12.662 debug3:找到匹配 9680 2020-04-18 21:35:12.662 debug3:重新处理配置:90 设置 AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys 9680 2020-04-18 21:35:12.662 debug3:mm_answer_pwnamallow:发送 MONITOR_ANS_PWNAM:1 9680 2020-04-18 21:35:12.662 debug3:mm_request_send 输入:类型 9 9680 2020-04-18 21:35:12.663 debug2: monitor_read: 8 使用一次,现在禁用 9680 2020-04-18 21:35:12.663 debug2:input_userauth_request:为 Foo 设置 authctxt [preauth] 9680 2020-04-18 21:35:12.663 debug3:mm_inform_authserv 正在进入 [预认证] 9680 2020-04-18 21:35:12.663 debug3:mm_request_send 输入:类型 4 [预认证] 9680 2020-04-18 21:35:12.663 debug2:input_userauth_request:尝试方法无[预认证] 9680 2020-04-18 21:35:12.663 debug3:user_specific_delay:用户特定延迟 0.000ms [预认证] 9680 2020-04-18 21:35:12.663 debug3:ensure_minimum_time_since:已用 2.930ms,延迟 4.950ms(请求 7.880ms)[预认证] 9680 2020-04-18 21:35:12.663 debug3:mm_request_receive 正在进入 9680 2020-04-18 21:35:12.663 debug3: monitor_read: 检查请求 4 9680 2020-04-18 21:35:12.663 debug3:mm_answer_authserv:服务=ssh-connection,样式= 9680 2020-04-18 21:35:12.663 debug2: monitor_read: 4 使用一次,现在禁用 9680 2020-04-18 21:35:12.668 debug3:userauth_finish:失败部分=0 下一个方法=“publickey,password,keyboard-interactive” [预认证] 9680 2020-04-18 21:35:12.668 debug3:发送数据包:类型 51 [预认证] 9680 2020-04-18 21:35:12.682 debug3:接收数据包:类型 50 [预认证] 9680 2020-04-18 21:35:12.682 debug1:用户 Foo 服务的用户身份验证请求 ssh 连接方法 publickey [preauth] 9680 2020-04-18 21:35:12.682 debug1:尝试 1 次失败 0 [预认证] 9680 2020-04-18 21:35:12.682 debug2:input_userauth_request:尝试方法publickey [preauth] 9680 2020-04-18 21:35:12.682 debug2:userauth_pubkey:有效用户 Foo 查询公钥 rsa-sha2-512 AAAAB3NzaC1...ySSBnSMShEX9WWNsp [preauth] 9680 2020-04-18 21:35:12.682 debug1:userauth_pubkey:测试 pkalg rsa-sha2-512 pkblob RSA SHA256:xfY86q...5lmGM [预认证] 9680 2020-04-18 21:35:12.682 debug3:mm_key_allowed 进入 [预认证] 9680 2020-04-18 21:35:12.682 debug3:mm_request_send 输入:类型 22 [预认证] 9680 2020-04-18 21:35:12.682 debug3:mm_key_allowed:等待 MONITOR_ANS_KEYALLOWED [预认证] 9680 2020-04-18 21:35:12.682 debug3:mm_request_receive_expect 输入:类型 23 [预认证] 9680 2020-04-18 21:35:12.682 debug3:mm_request_receive 正在进入 [预认证] 9680 2020-04-18 21:35:12.682 debug3:mm_request_receive 正在进入 9680 2020-04-18 21:35:12.682 debug3: monitor_read: 检查请求 22 9680 2020-04-18 21:35:12.683 debug3:mm_answer_key允许进入 9680 2020-04-18 21:35:12.683 debug3:mm_answer_keyallowed:key_from_blob:00000096661668C0 9680 2020-04-18 21:35:12.683 debug1:尝试公钥文件__PROGRAMDATA__/ssh/administrators_authorized_keys 9680 2020-04-18 21:35:12.683 debug3:无法打开文件:C:/ProgramData/ssh/administrators_authorized_keys 错误:2 9680 2020-04-18 21:35:12.683 debug1:无法打开授权密钥‘__PROGRAMDATA__/ssh/administrators_authorized_keys’:没有此文件或目录 9680 2020-04-18 21:35:12.683 debug3:mm_answer_keyallowed:公钥身份验证测试:不允许使用 RSA 密钥 9680 2020-04-18 21:35:12.683 来自 66.qrs 端口 50805 的 Foo 公钥失败 ssh2: RSA SHA256:xfY86q...5lmGM 9680 2020-04-18 21:35:12.683 debug3:mm_request_send 输入:类型 23 9680 2020-04-18 21:35:12.683 debug2:userauth_pubkey:已验证 0 pkalg rsa-sha2-512 [预认证] 9680 2020-04-18 21:35:12.683 debug3:user_specific_delay:用户特定延迟 0.000ms [预认证] 9680 2020-04-18 21:35:12.683 debug3:ensure_minimum_time_since:已用 0.932ms,延迟 6.948ms(请求 7.880ms)[预认证] 9680 2020-04-18 21:35:12.690 debug3:userauth_finish:失败部分=0 下一个方法=“publickey,password,keyboard-interactive” [预认证] 9680 2020-04-18 21:35:12.695 debug3:发送数据包:类型 51 [预认证] 9680 2020-04-18 21:35:12.713 debug3:接收数据包:类型 50 [预认证] 9680 2020-04-18 21:35:12.713 debug1:用户 Foo 服务的用户身份验证请求 ssh 连接方法键盘交互 [预身份验证] 9680 2020-04-18 21:35:12.713 debug1:尝试 2 次失败 1 [预认证] 9680 2020-04-18 21:35:12.713 debug2:input_userauth_request:尝试方法键盘交互[preauth] 9680 2020-04-18 21:35:12.713 debug1:键盘交互开发人员[预认证] 9680 2020-04-18 21:35:12.713 debug1:auth2_challenge:用户=Foo devs= [preauth] 9680 2020-04-18 21:35:12.713 debug1:kbdint_alloc:设备'' [预认证] 9680 2020-04-18 21:35:12.713 debug2:auth2_challenge_start:设备[预认证] 9680 2020-04-18 21:35:12.713 debug3:user_specific_delay:用户特定延迟 0.000ms [预认证] 9680 2020-04-18 21:35:12.713 debug3:ensure_minimum_time_since:已用 0.000ms,延迟 7.880ms(请求 7.880ms)[预认证] 9680 2020-04-18 21:35:12.721 debug3:userauth_finish:失败部分=0 下一个方法=“publickey,password,keyboard-interactive” [预认证] 9680 2020-04-18 21:35:12.721 debug3:发送数据包:类型 51 [预认证]
答案1
部分答案:
要实现这一点,一台计算机需要一个可靠的公共 IP 地址,您的 ISP 可能会提供也可能不会提供。如果计算机 1 和计算机 2 都没有公共 IP 地址,并且您可以将端口转发到此 IP 地址上的任何硬件(家庭路由器等)后面的计算机,则您的设置将无法在没有其他硬件的情况下工作(第三台计算机在某个地方有公共 IP 地址,可能是“在云端”并已付费)。
我非常困惑,为什么192.xyz 是计算机 1 旁边的路由器的地址,却在计算机 2 上产生任何影响。此命令的作用是将计算机 1 连接到路由器。它不会将计算机 1 连接到计算机 2。
ssh -N -L 127.0.0.1:8273:localhost:2812 [email protected] -p 2344
一种可能的解释是,其他人同时尝试通过 ssh 连接到计算机 2 并失败,您在日志中看到的情况纯属巧合。(它还向您表明,有人会尝试连接到公共 IP 地址上可见的计算机,如果您不知道如何保护计算机,迟早会被黑客入侵)
看着
路由器正在将端口转发到计算机 1 的端口 22。
ssh
仅当您在计算机 2 上运行并连接到计算机 1 旁边的路由器的公共 IP 地址时,该功能才会起作用。要调试该问题,您需要做的只是通过 ssh 从计算机 1 登录到计算机 2,然后查看是否可行。(或者,如果计算机 1 具有路由器的公共 IP 地址,而计算机 2 没有,则从计算机 2 登录到计算机 1)。
因此,从计算机 1 执行
ssh Foo@computer2
,其中computer2
是计算机 2 的公共 IP 地址,Foo 是计算机 2 上的帐户。如果成功,您可以使用该命令的变体来建立隧道。如果失败,请查看日志并找出失败的原因。
编辑
端口转发通常用于传递传入连接到家庭路由器到家庭网络中的计算机。这是必要的,因为家庭路由器进行网络地址转换 (NAT),并且其后面的计算机对外部不可见。
这是不是需要反向连接,我很惊讶你甚至能够设置这个(我见过的所有家用路由器 UI 仅适用于传入连接)。
因此,虽然这解释了为什么您可以从计算机 1 连接到路由器并最终到达计算机 2,但这也增加了额外的复杂性 - 现在您的家用计算机还必须转换返回的连接,而它可能正确地执行也可能不正确。
因此,请在家庭路由器上为计算机 1 禁用端口转发,直接从计算机 1 连接到计算机 2,然后使用此命令编辑您的问题(我假设,计算机 2 的公共 IP 地址在哪里)。ssh [email protected] -p 2344
a.b.c.d
下一步是让它发挥作用没有密码和没有隧道。调试的诀窍是尽量简单,一步一步地进行。每个步骤中消除的复杂性越多,找出问题就越容易。
~/.ssh/
因此,请确保您在计算机 1 上拥有具有正确权限的公钥和私钥文件。确保您已将公钥复制到authorized_keys
帐户文件Foo
(您包含的日志仅显示它正在尝试读取authorized_keys
管理员帐户的文件,但失败了,Foo 可能是也可能不是管理员帐户,您没有说)。还要确保使用ssh -v
进行连接,这样您还可以在客户端看到发生了什么以及问题出在哪里。
如果 Foo 确实是管理员帐户,那么您的第一个问题就是您没有将公钥放入__PROGRAMDATA__/ssh/administrators_authorized_keys
计算机 2 中。