SSH membuat semua kata sandi yang diketik terlihat ketika perintah diberikan sebagai argumen terhadap perintah SSH

45

Jika saya menjalankan ini:

ssh user@server 'mysql -u user -p'

Ketika saya ditanyai kata sandi MySQL, dan saya mulai mengetik, kata sandi itu terlihat di layar. Bagaimana saya bisa mencegah ini? Jika saya masuk sshdan kemudian menjalankan perintah MySQL, semuanya berfungsi dengan baik.

pengguna110971
sumber
5
jangan Anda pikir judul itu agak tidak jelas .. Anda bisa mengatakan itu membuat semua teks termasuk kata sandi terlihat. Dan bagaimana ssh dimaksudkan untuk mengetahui apa yang Anda ketikkan adalah kata sandi vs beberapa perintah atau data lainnya?
barlop
@barlop Saya terbuka untuk saran.
user110971
@barlop juga berfungsi ketika Anda menjalankan perintah setelah Anda ssh ke server. Saya mencari beberapa cara untuk membuat perilaku ssh sama ketika perintah diberikan sebagai argumen.
user110971
mungkin itu tidak perlu, tetapi dapatkah Anda menyertakan salinan lengkap / contoh yang dilekatkan dari konsol, mis. menunjukkan tidak hanya perintah ssh tetapi juga responsnya, dan prompt mysql yang mengikuti. Anda dapat mengubah kata sandi menjadi swisscheese agar tidak meletakkannya di situs yang saya tidak dapat mengujinya saat ini
barlop
@barlop Hanya pesan yang sama seperti yang Anda harapkan yaitu kata sandi ssh diikuti oleh kata sandi MySQL
user110971

Jawaban:

100

Jika Anda memberikan perintah jarak jauh untuk dijalankan, SSH tidak mengalokasikan tty, sehingga perintah jarak jauh tidak dapat menonaktifkan gema. Anda dapat memaksa SSH untuk menyediakan tty menggunakan -topsi:

ssh -t user@server 'mysql -u user -p'

Opsi yang setara (untuk -oatau untuk file konfigurasi) adalah RequestTTY. Saya memperingatkan agar tidak menggunakannya dalam konfigurasi karena dapat memiliki efek yang tidak diinginkan untuk perintah non-interaktif .

Toby Speight
sumber
15
Atau Anda dapat mengedit ~ / .ssh / config untuk mengonfigurasi host tertentu untuk selalu meminta TTY. Lihat RequestTTYdi man 5 ssh_config.
CVn
7
@ MichaelKjörling (dan Toby): mungkin menambahkan sedikit peringatan bahwa menambahkan "-t" harus disediakan hanya untuk penggunaan interaktif, karena memiliki efek samping. Untuk pandangan yang baik tentang beberapa efek samping: unix.stackexchange.com/a/122624/27616 (dari StephaneChazelas)
Olivier Dulac
Setuju - Saya akan menyarankan bahwa itu memalukan Anda tidak dapat menambahkan pengaturan (seperti ini) sesuai dengan perintah jarak jauh (bukan oleh Host).
Toby Speight
28

Menyimpan kata sandi dalam file opsi yang dilindungi

Jika Anda dapat mempercayai [*] keamanan komputer remote, Anda dapat menyimpan password dalam file pilihan benar dilindungi, seperti yang disarankan dalam Pedoman End-User untuk Keamanan Password bab dari manual, tanpa perlu untuk berkomunikasi melalui sshatau mengetik setiap waktu.

Khususnya Anda dapat menambahkan baris di bagian [klien] file .my.cnfdi direktori home Anda:

[client]
password=your_pass

Tentu saja Anda harus menjaga agar file tersebut tidak dapat diakses oleh siapa pun kecuali Anda sendiri, dengan mengatur mode akses file ke 400 atau 600 dengan, misalnya

chmod 600 ~/.my.cnf

Maka Anda dapat menggunakan sesuatu seperti

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

di mana user110971nama pengguna akun Anda.


Memaksa ssh untuk mengalokasikan pseudo tty ( ssh -t)

Masalah ini terjadi setiap kali Anda mengirim perintah sshdan Anda harus memasukkan input karena, secara default, sshtidak akan mengalokasikan pseudo-tty.

Anda dapat memaksa alokasi tty dengan opsi -t, (bahkan lebih dari satu jika diperlukan):

-t

Paksa alokasi pseudo-tty. Ini dapat digunakan untuk menjalankan program berbasis layar yang sewenang-wenang pada mesin jarak jauh, yang dapat sangat berguna, misalnya saat mengimplementasikan layanan menu. Pilihan ganda -tmemaksa alokasi tty, bahkan jika ssh tidak memiliki tty lokal.

Seperti yang dapat Anda baca di pos Debian ini (Jul_11_2008) tentang sudo, ini adalah masalah lama yang suka berulang:

ssh user@server "sudo ls"  
password: password  

Dan kata sandi ditampilkan kepada Anda

Solusinya adalah dengan memaksa ssh untuk mengalokasikan pseudo-tty, dengan flag -t:

ssh -t user@server sudo ls

catatan:

[*] Jika Anda dapat mengandalkan kata sandi dalam file yang hanya dapat diakses oleh Anda dan melakukan root padaklien yang berfungsi .
Jika dimungkinkan untuk mem-boot ulang komputer jarak jauh yang mengubah OS atau menghapus HDD, komputer tidak dapat dianggap sepenuhnya aman ... tetapi dalam kasus itu basis data itu sendiri tidak akan aman.

Cepat
sumber
1
mungkin menambahkan sedikit peringatan bahwa menambahkan "-t" harus disediakan hanya untuk penggunaan interaktif, karena memiliki efek samping. Untuk pandangan yang baik tentang beberapa efek samping: unix.stackexchange.com/a/122624/27616 (dari StephaneChazelas)
Olivier Dulac
3

Mount opsi "hidepid" untuk proc juga berharga. Itu membuat commandlines Anda tidak terlihat dalam daftar proses untuk pengguna lain. contoh fstab:

proc /proc proc hidepid=1 0 0
bandie
sumber