我正在尝试在可通过互联网远程访问的服务器计算机上设置git存储库。
我成功地让git在本地/内部IP地址上工作。在本地局域网中,我使用基于私钥的身份验证(禁用密码登录),我可以使用Git和SSH成功克隆,推送和拉取,例如;
ssh USER@192.168.1.xxx
[-> accepts public key, gives me a remote console prompt as "USER", etc]
git clone git+ssh://USER@192.168.1.xxx//gitdir/project.git
[-> creates a local clone as desired, commits and push work, no problems seemingly]
但是,我现在正试图通过外部/互联网IP以同样的方式访问这台机器,我不理解它给我的行为。
据我所知,我的路由器,SSH配置或UFW上没有任何设置可以阻止任何特定网址或以其他方式导致本地计算机或服务器出现问题。服务器应接受来自通过端口22访问的任何外部地址的连接,并且我的本地计算机和服务器通常都允许传出连接。
我在本地计算机上使用Ubuntu 17.04,如果这很重要的话。
服务器和本地计算机当前位于同一LAN上/连接到同一路由器。
我已经禁用" ChallengeResponseAuthentication"和" PasswordAuthentication",并且已启用" PubkeyAuthentication"在我的" sshd_config"。
我已经四次检查我使用了正确的IP,并使用了复制粘贴而不是手动输入。除非我真的错过了什么,否则我正试图连接到正确的机器。
对于直接SSH登录,我得到了这个(使用-v标志):
LOCALUSER@LOCALMACHINE:~$ ssh -v -i ~/.ssh/[PRIVATE_KEY] USER@[IP6_EXTERNAL_IP]
OpenSSH_7.4p1 Ubuntu-10, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /home/[HOME]/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to [IP6_EXTERNAL_IP] [[IP6_EXTERNAL_IP]] port 22.
debug1: Connection established.
debug1: identity file /home/[HOME]/.ssh/[PRIVATE_KEY] type 4
debug1: key_load_public: No such file or directory
debug1: identity file /home/[HOME]/.ssh/[PRIVATE_KEY]-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4p1 Ubuntu-10
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4p1 Ubuntu-10
debug1: match: OpenSSH_7.4p1 Ubuntu-10 pat OpenSSH* compat 0x04000000
debug1: Authenticating to [IP6_EXTERNAL_IP] as 'USER'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:[SHA_HASH]
debug1: Host '[IP6_EXTERNAL_IP]' is known and matches the ECDSA host key.
debug1: Found key in /home/[HOME]/.ssh/known_hosts:4
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering ED25519 public key: /home/[HOME]/.ssh/[PRIVATE_KEY]
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password
USER@[IP6_EXTRNAL_IP]'s password:
...并且没有我提供的密码。我不知道为什么服务器甚至要求输入密码,我在&#34; sshd_config&#34;中全局禁用了密码登录,我已经三次检查了这个用户没有例外,因为好。
当我尝试通过外部IP从服务器克隆时,Git同样要求我输入远程用户的密码(因为它当然是通过SSH工作),如果我执行以下操作将其设置为使用外部IP,而不是原始的本地IP:git remote set-url origin ssh+git://USER@[REMOTE_IP]//gitdir/project.git
任何帮助理解我在这里失踪的内容都会非常感激;感谢。
答案 0 :(得分:0)
想出来:
我不知道为什么,但当我尝试通过外部公共IP从我自己的局域网内访问我的服务器时,我的系统不喜欢它。我认为这是因为某种类型的数据包混淆,因为本地机器和服务器机器通过路由器共享相同的公共IP(对此的确认将不胜感激)。
当我尝试从另一个网络连接时,事情正常并且符合预期。我被问到我的公钥并立即被拒绝,如果我没有提供正确的密码则没有密码提示,并且在我更改我的repo源以使用public ip之后,通过SSH的SSH和git似乎都可以通过互联网工作。通过编辑〜/ .ssh / config来设置关键身份和主机,可以了解更多细节。
标记为已解决。谢谢。