解决具有主连接和端口转发的两因素SSH身份验证吗?


8

问题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
$

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

$ ssh my.example.com
Last login: Wed Oct  1 16:34:45 2014 from 12.34.56.78
$ 

这样,任务完成了,不再需要输入2FA令牌。而且,没有密码,SSH FTW!

〜/ .ssh / config:

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

问题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$ 

但是2222仅打开以用于来自localhost的连接,并且管理员不会打开任何其他端口,并说“任何人都可以使用它”。


我可能会误解您的问题,但是您无法通过本地ssh挂接解决它吗?这会将您的sftp操作转换为本地副本,而ssh由您可以控制的安装过程处理。
Belrog

我应该在问题中提到……我需要SSH才能运行远程Python解释器/调试器。我实际上确实有一个用于文件同步的sshfs安装:)
frnhr 2014年

我假设您正在远程处理某些非常特定的硬件?远程开发确实很痛苦。如果可以运行本地VM,则是一个更好的主意。
Belrog

真是的 但是在这个特定项目上,设置本地环境存在一些复杂问题,这些问题无法轻易解决:(
frnhr 2014年

@Belrog我将您的答案转换为评论。如果它确实回答了问题,请仅发布答案。要进行澄清,请发表评论。那就是他们的目的。
terdon

Answers:


2

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

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

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

如果不可能,则可以在侦听回送地址的远程主机上运行自己的ssh守护程序,并通过本地转发连接到它。

要设置无特权的ssh守护程序(从SF Answer上的链接复制):

  $ 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

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

 ssh -L 2230:localhost:2230 example_com_master

并将pyCharm直接指向localhost:2230。您还可以在自定义sshd上设置密钥对auth。

请注意,这是一个远景,您的系统管理员可能会不满意。

pyCharm很有可能已经在其ssh实现中使用了OpenSSH。如果是这样,向pyCharm添加多路复用支持会比我建议的解决方法容易得多。


感谢您的回答。管理员可能不允许我运行自己的sshd(我怀疑甚至没有可用的端口)。但是,如果我可以在服务器上运行一个单独的sshd,则我想我可能不需要多路复用任何东西,只需为密钥对auth配置服务器即可。还是我错过了一些好处?
2014年

您完全不需要多路复用是正确的:)。另外,我知道如果用户在没有先问我的情况下做类似的事情,我会很生气。另外,如果仍然要问系统管理员,一个更明智的解决方案是不需要本地主机的2fa。那是我通常要做的。
GnP 2014年

:)如果本地主机没有2fa,则隧道可以解决问题吗?
frnhr 2014年

的确,如果您不需要本地主机的2fa,则通过隧道连接就像本地连接一样。如果您没有在文件末尾添加sshd_config魔术,则Match Address 127.0.0.1 PasswordAuthentication yes 可能在其后Match一行单独插入一个单行以关闭该部分。
GnP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.