Làm việc xung quanh hai yếu tố SSH auth với kết nối Master và chuyển tiếp cổng?


8

Vấn đề 1.0

Tôi đang làm việc trên một máy chủ chỉ hỗ trợ auth hai yếu tố (khóa auth bị vô hiệu hóa). Vì vậy, mỗi khi khách hàng SFTP của tôi muốn tải lên một tệp, nó sẽ yêu cầu tôi mã thông báo ... sau 3 phút sẽ trở thành UX not_very_nice.

Giải pháp 1.0

Vì vậy, tôi đã tìm hiểu về ghép kênh SSH và bây giờ tôi có thể mở một kết nối chính theo cách thủ công (từ thiết bị đầu cuối) và tất cả các kết nối ssh khác có thể được ghép trên đầu, như vậy:

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

Sau đó, từ một thiết bị đầu cuối khác, hoặc bởi một phần mềm khác:

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

Vì vậy, nhiệm vụ đã hoàn thành, không còn nhập mã thông báo 2FA nữa. Và không có mật khẩu, cho vấn đề đó, 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

Vấn đề 2.0 (TLDR)

Một số phần mềm (ví dụ: PyCharm IDE) sử dụng thư viện / nhị phân SSH / bất cứ thứ gì của riêng họ ! Có nghĩa là không có gì tôi nhập vào ~/.ssh/configsẽ ảnh hưởng đến nó, AFAIK.

Đó là vấn đề hiện tại của tôi: có cách nào để "lừa" phần mềm đó sử dụng kết nối chính đã tồn tại không?


Một ý tưởng: bởi vì bạn thường có thể cấu hình phần mềm để sử dụng một cổng khác để kết nối, tôi đã tự hỏi liệu có thể thiết lập một số loại đường hầm sẽ ghép các kết nối đến với chủ hiện có. Nhưng foo của tôi đã làm tôi thất bại ...

biên tập:

Mục đích chính là kết nối với trình thông dịch / trình gỡ lỗi Python từ xa.

chỉnh sửa 2:

Tất cả các cổng được đóng khác sau đó 22 và 80. Tuy nhiên, có thể thực hiện:

remote$ ssh localhost:2222
(password or securekey login, both work)
remote$ 

nhưng 2222 chỉ mở cho các kết nối từ localhost và quản trị viên sẽ không mở bất kỳ cổng bổ sung nào, nói rằng "bất kỳ ai cũng có thể sử dụng nó".


Tôi có thể đang hiểu nhầm vấn đề của bạn, nhưng bạn không thể giải quyết vấn đề này với một ssh mount địa phương? Điều đó sẽ biến hành động sftp của bạn thành một bản sao cục bộ, với ssh được xử lý bởi quá trình gắn kết mà bạn có thể kiểm soát.
Belrog

Tôi nên đề cập rằng trong câu hỏi ... Tôi cần SSH để chạy trình thông dịch / trình gỡ lỗi Python từ xa. Tôi thực sự có một sshfs mount tại chỗ để đồng bộ hóa tệp :)
frnhr

Tôi giả sử bạn đang làm việc trên một số phần cứng rất cụ thể từ xa? Phát triển từ xa thực sự đau đớn. Một VM cục bộ sẽ là một ý tưởng tốt hơn nếu bạn có thể làm cho nó hoạt động.
Belrog

Dat đúng! Nhưng trong dự án cụ thể này, có một số phức tạp với việc thiết lập môi trường cục bộ không thể giải quyết dễ dàng :(
frnhr

@Belrog Tôi đã chuyển đổi câu trả lời của bạn thành một bình luận. Xin vui lòng chỉ gửi một câu trả lời nếu nó thực sự trả lời câu hỏi. Để yêu cầu làm rõ, gửi bình luận. Đó là những gì họ làm.
terdon

Câu trả lời:


2

Một vấn đề khá thú vị mà bạn gặp phải.

Giải pháp thực sự sẽ là yêu cầu sysadmin của bạn giúp đỡ trước.

Nếu đó không phải là một lựa chọn, điều tốt nhất tiếp theo là có libssh của pyCharm hoặc bất cứ thứ gì nó sử dụng (tôi đã làm một số việc và không thể tìm ra nó) phân tích `~ / .ssh / config 'của bạn.

Nếu điều đó là không thể, bạn thể chạy trình nền ssh của riêng mình trên máy chủ từ xa nghe trên địa chỉ loopback và kết nối với nó bằng một chuyển tiếp cục bộ.

Để thiết lập một daemon ssh không có đặc quyền (được sao chép từ một liên kết trên câu trả lời 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

Bây giờ hãy chuyển tiếp một cổng cục bộ tới nó (bạn sẽ đăng nhập bằng 2fa tại đây):

 ssh -L 2230:localhost:2230 example_com_master

Và trực tiếp pyCharm đến localhost:2230. Bạn cũng có thể thiết lập khóa ghép auth trên sshd tùy chỉnh của mình.

Lưu ý rằng đây là một cú sút xa và sysadmin của bạn có thể không đánh giá cao nó.

Có một cơ hội lớn rằng pyCharm đã sử dụng OpenSSH để triển khai ssh. Nếu đúng như vậy, việc thêm hỗ trợ ghép kênh vào pyCharm sẽ dễ dàng hơn cách giải quyết mà tôi đã đề xuất.


Cảm ơn câu trả lời. Quản trị viên có thể sẽ không cho phép tôi chạy sshd của riêng mình (tôi nghi ngờ thậm chí còn có một cổng có sẵn). Nhưng nếu tôi có thể có một sshd riêng chạy trên máy chủ thì tôi nghĩ rằng tôi có thể không cần phải ghép bất cứ thứ gì, chỉ cần cấu hình máy chủ để xác thực khóa. Hoặc có một số lợi ích mà tôi đã bỏ lỡ?
frnhr

Bạn nói đúng về việc không cần ghép kênh gì cả :). Ngoài ra, tôi biết tôi sẽ tức giận nếu người dùng làm điều tương tự mà không hỏi tôi trước. Ngoài ra nếu bạn định hỏi sysadmin bằng mọi cách, một giải pháp sạch hơn sẽ là không yêu cầu 2fa từ localhost. Đó là những gì tôi thường làm.
GnP

:) Và nếu không có 2fa từ localhost, đường hầm có thể giải quyết vấn đề không?
frnhr

Chính xác, nếu bạn không yêu cầu 2fa từ localhost, kết nối qua đường hầm cũng giống như kết nối cục bộ. Phép thuật sshd_config cho nó Match Address 127.0.0.1 PasswordAuthentication yes Có lẽ được theo sau bởi một Matchdòng duy nhất để đóng phần đó, nếu bạn không thêm phần này vào cuối tệp.
GnP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.