使用主连接和端口转发解决两因素 SSH 身份验证?

frn*_*nhr 8 ssh ssh-tunneling

问题1.0

我正在使用仅支持双因素身份验证(密钥对身份验证已禁用)的服务器。所以每次我的 SFTP 客户端想要上传一个文件时,它都会要求我提供一个令牌...... 3 分钟后,它变成了一个 not_very_nice UX。

解决方案 1.0

所以我了解了 SSH 多路复用,现在我可以手动打开一个主连接(从终端),所有其他 ssh 连接都可以在上面多路复用,如下所示:

$ ssh example_com_master
Verification code: (/me enters the token code)
Password: (/me enters my pass)
Welcome to Ubuntu 14.04 blah blah....
Last login: Wed Oct  1 11:24:15 2014 from 12.34.56.78
$
Run Code Online (Sandbox Code Playgroud)

然后,从另一个终端或另一个软件:

$ ssh my.example.com
Last login: Wed Oct  1 16:34:45 2014 from 12.34.56.78
$ 
Run Code Online (Sandbox Code Playgroud)

所以,任务完成,不再输入2FA令牌。没有密码,就此而言,SSH FTW!

~/.ssh/配置:

Host example_com_master
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster yes
  ControlPath ~/.ssh/sockets/example_com
  ControlPersist 10

Host my.example.com
  HostName my.example.com
  User username
  PubkeyAuthentication no
  ControlMaster no
  ControlPath ~/.ssh/sockets/example_com
Run Code Online (Sandbox Code Playgroud)

问题 2.0 (TLDR)

某些软件(例如 PyCharm IDE)使用自己的 SSH库/二进制文件/随便什么!这意味着我输入的任何内容都~/.ssh/config不会影响它,AFAIK。

这就是我目前的问题:有没有办法“欺骗”这样的软件使用已经存在的主连接?


一个想法:因为您通常可以将软件配置为使用不同的端口进行连接,我想知道是否有可能设置某种隧道,将传入连接多路复用到现有主服务器上。但是我的 foo 让我失望了...

编辑:

主要目的是连接到远程 Python 解释器/调试器。

编辑2:

除了 22 和 80 之外的所有端口都关闭。但是,可以这样做:

remote$ ssh localhost:2222
(password or securekey login, both work)
remote$ 
Run Code Online (Sandbox Code Playgroud)

但是 2222 只对来自本地主机的连接开放,管理员不会打开任何额外的端口,说“任何人都可以使用它”。

GnP*_*GnP 3

你遇到了一个非常有趣的问题。

真正的解决方案是首先向系统管理员寻求帮助。

如果这不是一个选择,那么下一个最好的事情就是让 pyCharm 的 libssh 或它使用的任何东西(我做了一些谷歌搜索但无法弄清楚)解析你的“~/.ssh/config”。

如果这是不可能的,您也许可以在远程主机上运行您自己的 ssh 守护程序来侦听环回地址,并使用本地转发连接到它。

要设置非特权 ssh 守护进程(从SF 答案上的链接复制):

  $ pwd
  /home/<USER>
  $ mkdir -p etc var/run
  $ cp /etc/sshd_config etc
  $ vi etc/sshd_config
  [Set `Port 2230']
  [Set `HostKey /home/<USER>/etc/ssh_host_rsa_key']
  [Set `UsePrivilegeSeparation no']
  [Set `PidFile /home/<USER>/var/run/sshd.pid']
  [:wq!]
  $ ssh-keygen -t rsa -f /home/<USER>/etc/ssh_host_rsa_key -N ''
  Generating public/private rsa key pair.
  Your identification has been saved in /home/<USER>/etc/ssh_host_rsa_key.
  Your public key has been saved in /home/<USER>/etc/ssh_host_rsa_key.pub.
  The key fingerprint is:
  02:5d:02:5d:e8:2e:c6:b9:4c:d9:93:6c:13:ef:5d:61 hein@vmbert2k8
  $ /usr/sbin/sshd -f /home/<USER>/etc/sshd_config -D
Run Code Online (Sandbox Code Playgroud)

现在将本地端口转发给它(您将在此处使用 2fa 登录):

 ssh -L 2230:localhost:2230 example_com_master
Run Code Online (Sandbox Code Playgroud)

并将 pyCharm 定向到localhost:2230. 您还可以在自定义 sshd 上设置密钥对身份验证。

请注意,这是一个不太可能的事情,您的系统管理员可能不会意识到这一点。

pyCharm 很可能已经使用 OpenSSH 来实现 ssh。如果是这样,向 pyCharm 添加多路复用支持将比我提出的解决方法容易得多。