Bagaimana saya terhubung ke komputer lain melalui SSH dalam satu baris? Jika saya melakukannya ssh host@IP
, saya harus memasukkan kata sandi di baris kedua. Saya berpikir bahwa saya bisa melakukan sesuatu seperti ini: ssh host@IP | echo password
, tapi itu memasukkan kata sandi sebelum meminta kata sandi.
21
ssh
akan membaca kata sandi dari stdin, laluecho password | ssh host@IP
akan bekerja, tetapi biasanya SSH mencoba membaca langsung dari terminal.Jawaban:
Anda harus menggunakan kunci SSH untuk mengautentikasi daripada meletakkan kata sandi Anda pada baris perintah seperti itu sangat tidak aman.
Cara kerjanya adalah begitu Anda sudah menyiapkan kunci SSH, yang harus Anda lakukan adalah mengeluarkan perintah:
dan tanpa mengetik hal lain, Anda akan secara otomatis masuk.
Salin SSH Public Key ke Mac / FreeBSD / Linux dari macOS
Ini mengasumsikan Anda memiliki akses ke server jarak jauh melalui otentikasi berbasis kata sandi (mengetikkan kata sandi), dan bahwa Anda telah membuat keypair pribadi / publik (jika tidak, lihat di bawah). Dalam contoh berikut, kami menggunakan RSA. Untuk memulai, mari salin kunci lebih dari itu (perlu diketahui bahwa direktori "home" berbeda antara macOS, Linux, BSD, dll.):
Menggunakan SCP:
Atau cukup dengan menyimpan file
authorized_keys
(Saya lebih suka metode ini):(Nama kunci Anda mungkin berbeda) Jika direktori .ssh tidak ada di server jarak jauh, Anda harus masuk dan membuatnya.
Sekarang kunci telah disalin dari mac ke terpencil server. Tetapkan izin yang benar untuk Kunci Publik SSH di server jarak jauh:
Selanjutnya tambahkan kunci ke file SSH Authorized_keys, jika file tersebut tidak ada, buatlah.
Jika file
authorized_keys
sudah ada di~/.ssh
gunakan perintah berikut:Jika file tidak ada, masukkan perintah berikut:
Hasilkan kunci Publik / Pribadi SSH di macOS
Buka Terminal dengan membuka Aplikasi - & gt; Utilitas - & gt; Terminal
Di terminal, gunakan perintah berikut untuk memulai pembuatan kunci
Selanjutnya Anda akan diminta untuk memberikan lokasi tempat Anda ingin membuat file kunci pribadi:
Masukkan file untuk menyimpan kunci (
/Users/username/.ssh/id_rsa
):Biarkan ini kosong untuk membuat kunci di lokasi default, yaitu
/Users/username/.ssh/id_rsa
. File kunci publik akan dibuat di lokasi yang sama, dan dengan nama yang sama, tetapi dengan ekstensi .PUB.Setelah Anda akan diminta untuk memilih kata sandi. Ini kata sandinya pilihan untuk menggunakan kunci pribadi.
Kunci SSH Anda dibuat.
Sekarang, ingatlah, jika Anda memasukkan kata sandi Anda akan diminta untuk memasukkannya setiap kali Anda terhubung. Utilitas
ssh-agent
akan menjaga frasa sandi di memori mengurangi kebutuhan untuk memasukkannya secara manual setiap kali Anda terhubung saat Anda berada di sesi yang sama. Untuk lebih jelasnya lihatman ssh-agent
sumber
ssh-copy-id
adalah alat yang bagus untuk mengotomatisasi beberapa hal di atas.Ada beberapa kemungkinan. Contoh Anda jelas tidak akan berfungsi, tetapi Anda dapat mencapai hal yang serupa dengan menggunakan
sshpass
utilitas:Catatan, ini tidak disarankan karena
password
akan terlihat untuk proses lain atau dalam sejarah shell.Cara yang jauh lebih baik untuk melakukan hal yang sama adalah mengatur otentikasi tanpa kata sandi menggunakan kunci SSH. Pendeknya:
sumber
sshpass
seperti yang Anda rekomendasikan, tetapi katanya perintah tidak ditemukan.ps auxw | grep sshpass
akan memberi tahu pengguna lain kata sandi ssh.pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh [email protected]
. Ituzzzzzzzz
adalah literal; sshpass menyembunyikan konten kata sandi. Mungkin iterasi sebelumnya kurang privasi.Menggunakan
expect
jelas salah untuk masuk ke koneksi ssh untuk apa pun selain di test suite.Apa yang dicari @ ben-a sudah diterapkan di ssh. Kuncinya adalah bagaimana menggunakannya. Jadi begini:
ssh-keygen
. Gunakan ECDSA atau RSA sebagai-t
(atau tipe) dan untuk RSA gunakan 2048 atau 4096 sebagai-b
(atau panjang BITS). Ini sudah cukup pada saat penulisan. SELALU menggunakan PASSWORD!ssh-copy-id
atau metodologi yang disebutkan di atas untuk membuat pada mesin Anda masuk ke (a.k.a. server) tersebut~/.ssh/authorized_keys
mengajukan. Di dalamnya ada salinan kunci publik yang baru saja Anda buat.~/.ssh/config
. Jika tidak ada, Anda dapat membuatnya.Dalam file ini, Anda menambahkan yang berikut untuk kebutuhan Anda
Anda sekarang dapat menggunakan hanya
ssh <name>
untuk mengatur koneksi, tetapi masih perlu kata sandi untuk kunci Anda. Untuk mengatasi ini, gunakan ssh-agent yang dikembangkan untuk tujuan ini. Untuk menambahkan kunci Anda ke agen cukup gunakanssh-add <path to keyfile>
. Anda akan dimintai kata sandi, dan itu akan menyimpan kunci untuk Anda dengan aman untuk sesi ini. Jika menghasilkan kesalahan "tidak dapat menemukan ssh-agent" (atau serupa), itu berarti bahwa mungkin agen belum dimulai. Anda dapat memulainya untuk sesi ini menggunakanssh-agent bash
. Ini akan memulai shell baru dengan agen aktif di dalamnya.Saat menggunakan langkah-langkah ini, Anda tidak hanya mempersulit seseorang untuk menyamar sebagai Anda dengan membajak kredensial Anda, tetapi juga menjaga kegunaannya (lebih mudah digunakan daripada kata sandi biasa).
sumber
Saya telah menghabiskan waktu yang lama mencari jawaban untuk ini juga. Meskipun tidak aman dan semua orang ini meminta Anda untuk menggunakan kunci RSA ( yang merupakan ide yang lebih aman dan dapat diandalkan ), itu sangat mungkin.
Gunakan program yang disebut
expect
untuk ini. Harapkan akan menonton stdout (dan saya pikir stderr jika dikonfigurasi dengan benar) untuk Anda, menunggu pesan tertentu dan menanggapi mereka dengan output. Harapkan itu sendiri sebenarnya adalah bahasa scripting, dan ketika saya melakukan hal yang sama, saya mengalami kesulitan membuat skrip saya sendiri berfungsi dengan baik karena pengaturan waktu. Namun, harapkan juga termasuk utilitas praktis yang disebutautoexpect
.Dengan autoexpect, ia akan mengawasi Anda dan membuat skrip ekspektasi untuk Anda. Cukup jalankan autoexpect dan perintah yang Anda inginkan:
dan lakukan apa yang biasanya Anda lakukan. Saat Anda keluar dari program (dengan mengetik
exit
di shell ssh'd), itu akan menghasilkan skrip. Jika Anda tidak ingin seluruh skrip yang Anda tulis berada dalam skrip harapan, Anda dapat mengedit skrip dari autoexpect (disebutscript.exp
) untuk keluar sebelum mengetikexit
perintah ke dalam shell. Baris yang ingin Anda pindahkan untuk mengubah akhir skrip adalah:yang berarti mengharapkan akhir file. Semoga ini membantu!
sumber