Cara SSH dalam satu baris

21

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.

Ben A.
sumber
2
Pemikiran seperti ini datang dari masa-masa telnet dan berharap, kembali ketika internet adalah tempat yang lebih aman. Jawaban Allen benar, jawaban Jakuje benar secara teknis tetapi bukan alat untuk pekerjaan di sebagian besar tempat.
Criggie
3
Ini adalah pertanyaan yang bagus untuk mengatur login tanpa kata sandi. Saya akan meminta Anda mengunjungi kembali jawaban yang Anda terima. Jawaban Jakuje-mana yang benar, dan akan bekerja, cara yang tepat untuk melakukan ini adalah dengan kunci SSH, dijelaskan dalam jawaban Allan.
Scot
Jika ssh akan membaca kata sandi dari stdin, lalu echo password | ssh host@IP akan bekerja, tetapi biasanya SSH mencoba membaca langsung dari terminal.
Paŭlo Ebermann

Jawaban:

76

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:

ssh user@host

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:

scp ~/.ssh/id_rsa.pub username@hostname:/Users/username/.ssh/

Atau cukup dengan menyimpan file authorized_keys (Saya lebih suka metode ini):

cat id_rsa.pub | ssh username@hostname ' cat >>.ssh/authorized_keys'

(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:

chmod 600  ~/.ssh/id_rsa.pub

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:

cat id_rsa.pub >> authorized_keys

Jika file tidak ada, masukkan perintah berikut:

cat id_rsa.pub > authorized_keys

chmod 600 authorized_keys
chown user:group authorized_keys


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

ssh-keygen -t rsa

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.

Enter passphrase (empty for no passphrase):

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 lihat man ssh-agent

Allan
sumber
6
Tentu saja - kunci ini dapat dan harus sepenuhnya mengganti kata sandi untuk akses ssh apa pun melalui internet. Saya sarankan Anda memperluas pada kebutuhan untuk keamanan kunci pribadi, bahwa itu bukan sesuatu untuk meletakkan semua komputer Anda.
Criggie
+1 Ini adalah jawaban yang sangat bagus, bukan hanya karena apa yang dikatakannya, tetapi juga karena cara Anda menjelaskannya. Apa pun yang lebih mudah diikuti oleh pengguna dan membantu mereka menjadi lebih aman adalah nilai tambah di buku saya!
Monomeeth
7
Jawaban yang bagus Hanya ingin menambahkan itu ssh-copy-id adalah alat yang bagus untuk mengotomatisasi beberapa hal di atas.
Scot
Disebutkan ssh-agent mungkin juga membantu. Sebagian besar (semua?) Versi OS X / macOS menyertainya, dan memungkinkan login tanpa kata sandi bahkan ketika kunci dilindungi kata sandi.
Qsigma
1
@ Mask - ini bukan bagian dari macOS secara default dan harus diinstal melalui Homebrew atau MacPorts . Saya bukan penggemar menginstal perangkat lunak untuk hal-hal yang dapat dilakukan dalam 1 baris atau skrip pendek yang ditulis sendiri dan karena alasan itu saya pikir itu di luar cakupan jawabannya. Namun, itu utilitas kecil yang baik dan layak disebut.
Allan
11

Ada beberapa kemungkinan. Contoh Anda jelas tidak akan berfungsi, tetapi Anda dapat mencapai hal yang serupa dengan menggunakan sshpass utilitas:

sshpass -p password ssh host@IP

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:

ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP
Jakuje
sumber
Saya mencoba sshpass seperti yang Anda rekomendasikan, tetapi katanya perintah tidak ditemukan.
Ben A.
8
Yah ... Anda mungkin harus menginstalnya. Dan tidak, saya tidak merekomendasikannya. Atur otentikasi tanpa kata sandi menggunakan kunci ssh.
Jakuje
4
@ Ben mengatur otentikasi tanpa kata sandi dengan mendefinisikan keypad publik / pribadi dan mengaturnya pada kedua mesin yang terlibat. Itu jauh lebih mudah (dan sebenarnya lebih aman) daripada kata sandi apa pun
nohillside
8
Seribu kali tidak. sshpass adalah hack kotor yang digunakan untuk menghubungkan ke perangkat yang berbicara ssh tetapi tidak melakukan kunci dengan benar, dan penggunaan utamanya adalah setup script Anda tidak akan menggunakan sshpass pada mesin multiuser ps auxw | grep sshpass akan memberi tahu pengguna lain kata sandi ssh.
Criggie
1
@Criggie, tidak sepenuhnya. Sementara saya 100% di belakang solusi berbasis kunci, saya memiliki sshpass pada beberapa Raspberry Pis internal saja (untuk tugas-tugas acak, dan diakses oleh klien acak; melewati kunci di sekitar hanya untuk penggunaan internal adalah merepotkan). Menjalankan perintah Anda memberikan output berikut: 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]. Itu zzzzzzzz adalah literal; sshpass menyembunyikan konten kata sandi. Mungkin iterasi sebelumnya kurang privasi.
flith
3

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:

  1. Hasilkan keypair publik / pribadi menggunakan 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!
  2. Gunakan 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.
  3. Sekarang pada mesin yang Anda gunakan untuk masuk ke 'server' (atau klien) Anda membuka file ~/.ssh/config. Jika tidak ada, Anda dapat membuatnya.
  4. Dalam file ini, Anda menambahkan yang berikut untuk kebutuhan Anda

    host <name you want to use for this connection>
        Hostname <DNS or IP of the server>
        user <user name you want to use>
        identitiesonly yes
        identityfile <path to the private key>
    
  5. 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 gunakan ssh-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 menggunakan ssh-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).

LvB
sumber
2

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 disebut autoexpect.

Dengan autoexpect, ia akan mengawasi Anda dan membuat skrip ekspektasi untuk Anda. Cukup jalankan autoexpect dan perintah yang Anda inginkan:

autoexpect ssh host@ip 

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 (disebut script.exp ) untuk keluar sebelum mengetik exit perintah ke dalam shell. Baris yang ingin Anda pindahkan untuk mengubah akhir skrip adalah:

expect eof

yang berarti mengharapkan akhir file. Semoga ini membantu!

Allan
sumber
1
Jika belum ada yang mengatakan: Selamat Datang di Ask Different!
Synoli