Mengatasi dua faktor SSH auth dengan koneksi Master dan penerusan porta?

8

Masalahnya 1.0

Saya sedang mengerjakan server yang hanya mendukung dua faktor auth (keypair auth dinonaktifkan). Jadi setiap kali klien SFTP saya ingin mengunggah file, ia meminta saya token ... setelah 3 menit itu menjadi UX not_very_nice.

Solusinya 1.0

Jadi saya belajar tentang multiplexing SSH dan sekarang saya dapat membuka satu koneksi master secara manual (dari terminal), dan semua koneksi ssh lainnya dapat di-multiplexing di atas, seperti:

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

Kemudian, dari terminal lain, atau dengan perangkat lunak lain:

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

Jadi, misi selesai, tidak ada lagi yang masuk token 2FA. Dan tidak ada kata sandi, dalam hal ini, 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

Masalah 2.0 (TLDR)

Beberapa perangkat lunak (misalnya PyCharm IDE) menggunakan perpustakaan / biner SSH mereka sendiri ! Berarti tidak ada yang saya ketikkan yang ~/.ssh/configakan memengaruhinya, AFAIK.

Itu masalah saya saat ini: apakah ada cara untuk "mengelabui" perangkat lunak tersebut agar menggunakan koneksi master yang sudah ada?


Sebuah ide: karena Anda biasanya dapat mengkonfigurasi perangkat lunak untuk menggunakan port yang berbeda untuk terhubung, saya bertanya-tanya apakah mungkin untuk mengatur semacam tunneling yang akan multiplex koneksi masuk ke master yang ada. Tapi foo saya telah mengecewakan saya ...

edit:

Tujuan utamanya adalah untuk terhubung ke interpreter / debugger Python jarak jauh.

edit 2:

Semua port ditutup selain 22 dan 80. Namun, dimungkinkan untuk melakukan:

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

tetapi 2222 hanya terbuka untuk koneksi dari localhost, dan admin tidak akan membuka port tambahan, mengatakan "siapa pun bisa menggunakannya".

frnhr
sumber
Saya mungkin salah paham masalah Anda, tetapi tidak bisakah Anda mengatasinya dengan ssh mount lokal? Itu akan mengubah tindakan sftp Anda menjadi salinan lokal, dengan ssh ditangani oleh proses mount yang dapat Anda kontrol.
Belrog
Saya seharusnya menyebutkan bahwa dalam pertanyaan ... Saya perlu SSH untuk menjalankan interpreter / debugger Python jarak jauh. Saya sebenarnya memiliki sshfs mount di tempat untuk sinkronisasi file :)
frnhr
Saya berasumsi Anda sedang mengerjakan beberapa bit perangkat keras yang sangat spesifik dari jarak jauh? Pengembangan jarak jauh sangat menyakitkan. VM lokal akan menjadi ide yang lebih baik jika Anda dapat membuatnya bekerja.
Belrog
Dat benar! Tetapi pada proyek khusus ini ada beberapa komplikasi dengan pengaturan lingkungan lokal yang tidak dapat dipecahkan dengan mudah :(
frnhr
@Belrog Saya mengubah jawaban Anda menjadi komentar. Harap hanya mengirim jawaban jika itu benar-benar menjawab pertanyaan. Untuk meminta klarifikasi, kirimkan komentar. Itu untuk apa mereka.
terdon

Jawaban:

2

Masalah yang cukup menarik.

Solusi sebenarnya adalah meminta bantuan sysadmin Anda terlebih dahulu.

Jika itu bukan pilihan, hal terbaik berikutnya adalah memiliki libssh pyCharm atau apa pun yang digunakannya (saya melakukan beberapa googling dan tidak bisa mengetahuinya) uraikan `~ / .ssh / config 'Anda.

Jika itu tidak memungkinkan, Anda mungkin dapat menjalankan daemon ssh Anda sendiri pada remote host mendengarkan pada alamat loopback dan menghubungkannya dengan forward lokal.

Untuk mengatur daemon ssh tidak privat (disalin dari tautan pada jawaban 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

Sekarang teruskan port lokal ke sana (Anda akan masuk dengan 2fa di sini):

 ssh -L 2230:localhost:2230 example_com_master

Dan pyCharm langsung ke localhost:2230. Anda juga dapat mengatur keypair auth pada sshd kustom Anda.

Perhatikan bahwa ini adalah kesalahan besar, dan sysadmin Anda mungkin tidak menghargainya.

Ada kemungkinan besar bahwa pyCharm sudah menggunakan OpenSSH untuk implementasi ssh-nya. Jika demikian, menambahkan dukungan multiplexing ke pyCharm akan jauh lebih mudah daripada solusi yang saya usulkan.

GnP
sumber
Terima kasih atas jawabannya. Admin mungkin tidak akan mengizinkan saya untuk menjalankan sshd saya sendiri (saya ragu bahkan ada port yang tersedia). Tetapi jika saya bisa menjalankan sshd terpisah di server maka saya pikir saya mungkin tidak perlu multiplex apa pun, cukup konfigurasikan server untuk auth keypair. Atau ada beberapa manfaat yang saya lewatkan?
frnhr
Anda benar tentang tidak perlu multiplexing sama sekali :). Juga, saya tahu saya akan kesal jika pengguna melakukan sesuatu seperti itu tanpa meminta saya terlebih dahulu. Juga jika Anda akan tetap bertanya pada sysadmin, solusi yang lebih waras adalah tidak memerlukan 2fa dari localhost. Itulah yang biasanya saya lakukan.
GnP
:) Dan jika tidak ada 2fa dari localhost, bisakah tunneling menyelesaikan masalah?
frnhr
Tepatnya, jika Anda tidak memerlukan 2fa dari localhost, menghubungkan melalui terowongan seperti menghubungkan secara lokal. Sshd_config magic untuknya Match Address 127.0.0.1 PasswordAuthentication yes Mungkin diikuti oleh satu Matchbaris sendiri untuk menutup bagian, jika Anda tidak menambahkan ini di akhir file.
GnP