SSH me-reset ke port default saat reboot

12

Saya mengubah port SSH default saya di server rumah saya (dalam /etc/ssh/sshd_configfile) ke port 54747, kemudian restart sshdan sshdlayanan (tidak pernah yakin yang mana sehingga saya melakukan keduanya hanya untuk aman). Untuk menguji konfigurasi saya, saya logout dan kembali lagi tanpa masalah.

Beberapa hari kemudian, saya menginstal pembaruan apt, dan kemudian reboot server saya. Ketika saya mencoba SSH kembali (pada port 54747), saya mendapat koneksi menolak kesalahan.

Untuk beberapa alasan, saya mencoba SSH pada port default, dan itu berhasil! Saya kembali untuk memeriksa sshd_config, tetapi masih memiliki port khusus. Jadi saya restart sshdan sshdlayanan, dan kembali ke perilaku "biasa" (ssh pada port 54747). Saya mencoba me-reboot lagi, dan koneksi menolak lagi ...

Adakah yang tahu apa yang saya lakukan salah?

Detail ekstra:

  • Ubuntu 16.04.2 LTS
  • Server juga menggunakan HTPC, dengan sesi terbuka (pengguna yang sama dengan SSH) di TV saya
  • Saya SSH menggunakan kunci RSA laptop saya, dan telah menonaktifkan kata sandi auth
  • Dulu saya reboot dengan sudo reboot -h now, tetapi setelah mencari, saya menemukan itu tidak disarankan oleh beberapa orang, jadi saya mencoba sudo reboot, tetapi tidak ada perbedaan

EDIT Urutan acara:

  1. Ubah port SSH dari 22 menjadi 54747 in /etc/ssh/sshd_config
  2. Mulai kembali layanan ssh dan sshd
  3. Akhiri sesi SSH saat ini
  4. SSH berhasil kembali pada port 54747
  5. Mulai ulang
  6. Kesalahan koneksi SSH pada port 54747, tetapi berhasil pada port 22
  7. Mulai kembali layanan ssh dan sshd
  8. SSH berhasil kembali pada port 54747, kesalahan koneksi pada port 22
  9. Nyalakan kembali dan kembali ke 6

EDIT 1: netstat output

rgo@ATLAS:~$ sudo netstat -lntp | grep :54747
rgo@ATLAS:~$ sudo netstat -lntp | grep :22
tcp6       0      0 :::22                   :::*                    LISTEN      1/init  

EDIT 2: service sshd status

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

EDIT 3: lsof -i | grep ssh

systemd      1     root   46u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
systemd      1     root   49u  IPv6  14641      0t0  TCP *:ssh (LISTEN)
sshd      4088     root    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4088     root    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)

Sebagai referensi, ATLAS adalah nama host server jarak jauh, 192.168.1.27 adalah IP LAN laptop saya, dan perintah dijalankan antara langkah 6 dan 7

ufw status

Status: inactive

EDIT 4: ps -ef |grep sshd

root      4088     1  0 22:40 ?        00:00:00 sshd: rgo [priv]
rgo       4202  4088  0 22:40 ?        00:00:00 sshd: rgo@pts/1 sshd
3rgo
sumber
Saya tidak meremehkan Anda dengan cara apa pun. Tapi bagi saya sepertinya Anda tidak memasukkan perintah di ssh server seperti yang diminta. Anda tidak dapat memiliki koneksi ssh langsung ketika daemon ssh mati ....... pada server ssh, ps -ef | grep sshd harus mengembalikan proses / usr / sbin / sshd -D. Ada beberapa orang yang membantu tetapi mengirim Anda ke semua arah yang berbeda. Saya senang mengobrol dengan Anda di IM jika itu akan membantu Anda.
jones0610
Mungkin itu karena saya sudah memiliki sesi dengan pengguna yang sama dibuka dan ditampilkan di TV saya dengan Kodi?
3rgo
Hai, @ 3rgo, apakah Anda berhasil menyelesaikan ini?
pa4080
Hai! Tidak, saya masih mengalami masalah ini ... Untungnya, saya tidak perlu me-reboot server rumah saya begitu sering, tetapi masih menyakitkan, karena itu merusak beberapa proses otomatis saya ...
3rgo
Saya punya beberapa ide. (1) Anda dapat mencoba mengubah port ke nilai standarnya, kemudian restart seluruh sistem. Kemudian coba ubah lagi ke nilai yang diinginkan. (2) Coba dengan nilai yang berbeda, misalnya Port 10285. Google menunjukkan beberapa hasil untuk 54747 ... (3) Juga server SSH dapat bekerja dengan beberapa port secara bersamaan. Buat dua arahan terpisah untuk setiap port: Port 22dan Port 54747, kemudian buka hanya yang kedua ke firewall. (4) Anda dapat mencoba Match LocalPortarahan , ditempatkan di awal sshd_c.
pa4080

Jawaban:

2

ssh mungkin "soket diaktifkan" oleh systemd tergantung pada konfigurasi, yang berarti bahwa pada awalnya itu adalah systemd yang mengatur port mendengarkan, dan sshd hanya dimulai ketika klien pertama kali terhubung. Ini untuk mempercepat waktu startup: daemon layanan hanya dimulai atas permintaan.

Namun ini berarti Anda juga harus mengkonfigurasi systemd ke port yang cocok. Anda akan menemukan konfigurasi sistem di /lib/systemd/system/ssh.socketmana daftar ListenStream=22. Untuk menimpanya, buat file /etc/systemd/system/ssh.socket.d/port.conf(buat direktori ssh.socket.djika perlu) yang berisi:

[Socket]
ListenStream=
ListenStream=54747

Ubah nomor ke port yang diinginkan. Entri kosong pertama menghapus default sebelumnya, dan entri berikutnya menambahkan yang baru. Ini menimpa default yang dikirimkan /lib/systemd/system/ssh.socketdan harus dilakukan selain mengubah /etc/ssh/sshd_config.

Kemudian jalankan sudo systemctl daemon-reloaduntuk memberi tahu systemd tentang perubahan Anda, dan sudo systemctl reload sshjika daemon ssh Anda sebelumnya berjalan.

Robie Basak
sumber
Jawaban ini terlihat sangat menjanjikan, tetapi /etc/systemd/system/ssh.socket.d/port.confdiabaikan dan mem-boot ulang masih mengatur ulang port ke 22. Apakah nama file itu relevan? Tidak dapat menemukan dokumentasi yang bagus pada penggantian systemd di Ubuntu .
MestreLion
Nama file tidak masalah asalkan berakhir .conf. Lihat systemd-system.conf (5) untuk detail tentang file konfigurasi systemd override.
Robie Basak
Anda juga dapat berlari systemctl status ssh.socketuntuk melihat apakah itu diaktifkan dan apa yang sedang didengarnya.
Robie Basak
2
Ini bekerja!!! Akhirnya misteri ini terpecahkan! Tapi setelah itu saya perhatikan saya bisa mengakses menggunakan kedua port: default 22 dan custom. Menambahkan ListenStream=baris sebelum port khusus mencegahnya, tidak yakin mengapa. Mungkin ini "membersihkan" ListenStream=22pengaturan di default /lib/systemd/system/ssh.socket? Cara aneh untuk mengesampingkan pengaturan. Mungkin layak menambahkan ini ke jawabannya?
MestreLion
@EstreLion ah ya, itu benar. Saya akan memperbarui jawabannya. Terima kasih!
Robie Basak
0

Verifikasi pengaturan port Anda dalam /etc/ssh/sshd_configfile. Pastikan Anda mengedit sebagai sudo atau pengguna di grup sudo. Yang harus Anda lakukan untuk mengatur port adalah, pada satu jenis baris Port 54747.Sekarang, restart layanan ssh dengan menjalankan service sshd restart.Kemudian verifikasi bahwa ssh mendengarkan pada port itu dengan menjalankan sudo netstat -lntp | grep ssh.Reboot dan uji.

Periksa juga pengaturan jaringan Anda. Jika Anda berada di jaringan perusahaan, pastikan Anda berada di vlan yang benar.

G_Style
sumber
Saya melakukan backup dan mengedit file sebagai sudo, dan hanya mengubah Port 22baris default Port 54747. Juga, netstat yang Anda berikan kepada saya, tidak memiliki output. Saya menambahkan yang dimodifikasi di OP
3rgo
Anda terhubung dengan kunci yang benar? Jadi, Anda harus menghubungkan seperti: ssh -i key.txt user@ipaddress -p 54747. Juga periksa apakah ada hal lain yang mendengarkan pada port itu. Lakukan sudo lsof -i | grep ssh. Anda juga dapat memeriksa firewall Anda untuk memastikan tidak memblokir apa pun. Lakukan: sudo ufw status.
G_Style
Tidak ada port yang digunakan pada 54747 (lihat OP saya, saya menambahkannya). Saya menambahkan output dari perintah Anda juga
3rgo
Setelah lebih memikirkan masalah Anda, saya merasa itu bukan pengaturan Anda, tetapi cara Anda me-reboot, yang menyebabkan masalah ini Anda alami. Ketika Anda reboot Anda harus menggunakan perintah shutdown -r now. Cobalah dan beri tahu kami hasilnya. Lihat artikel ini untuk referensi: askubuntu.com/questions/483670/…
G_Style
Saya baru saja mencoba, dan mendapat hasil yang sama dengan sudo reboot -h nowatau `sudo reboot``
3rgo
0

Terkadang ada yang salah. Jika saya berada di tempat Anda, saya akan mencoba:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server
pa4080
sumber
Apakah itu mengharuskan saya mengakses server secara fisik? Jika demikian, saya hanya bisa melakukannya besok malam
3rgo
Hai @ 3rgo, saya pikir Anda tidak perlu akses fisik. Saya hanya mencobanya di VPS saya. Juga ke Server Ubuntu rumah saya, sementara saya login melalui SSH. Bahkan koneksi tidak terputus. cpperintah hanya dalam kasus, biasanya proses instalasi ulang tidak menyentuh file konfigurasi.
pa4080
Hai! Saya mencoba menginstal ulang, tetapi tidak ada yang berubah, saya masih memiliki masalah yang sama ...
3rgo
0

ssh adalah proses klien yang menengahi dan mempertahankan koneksi sesi pengguna ke server ssh. sshd adalah daemon yang berjalan di server ssh untuk mendengarkan dan mengautentikasi permintaan koneksi ssh.

File konfigurasi pada server sshd yang dibaca ketika memulai layanan sshd (yang membutuhkan hak sudo untuk mengedit) adalah

/etc/ssh/sshd_config

Layanan harus dimulai

/etc/systemd/system/sshd.service

Untuk me-restart sshd yang akan melibatkan membaca kembali file sshd_config

sudo service sshd restart

Untuk melihat port apa yang didengarkan daemon sshd, serta informasi bermanfaat lainnya, pada jenis server ssh

sudo service sshd status

Lakukan langkah-langkah ini dalam urutan yang ditentukan:

Mulai ulang server ssh

Buka sesi terminal di server ssh (bukan koneksi ssh ke dalamnya)

Tipe hostname

Jika nama host tidak mengembalikan nama server ssh (Atlas dalam kasus ini) ulangi langkah sebelumnya dengan benar.

grep Port /etc/ssh/sshd_config - perhatikan nomor port. Seharusnya yang Anda tentukan

sudo service sshd status

Jika status melaporkan bahwa itu aktif, berjalan dan mendengarkan pada port khusus yang Anda tentukan, maka Anda baik untuk itu. Jika tidak, startup layanan mungkin tidak memanggil file sshd_config yang Anda ubah tetapi file konfigurasi lain yang berisi info default. Jika layanan tidak dimulai (mengatakan mati dan tidak aktif dan berjalan, maka ini adalah masalah yang berbeda dari apa yang Anda tanyakan.

Langkah-langkah ini kemungkinan akan mengidentifikasi akar penyebab masalah yang Anda tanyakan.

Untuk tujuan pengujian dan untuk kesederhanaan: Di sisi klien, dari sesi terminal Anda akan ssh ke server ssh sebagai berikut

ssh -l username -p 54747 hostname

Berdasarkan umpan balik OP, saya menduga bahwa sshd tidak memulai bootup tetapi mulai dengan benar ketika secara manual dipanggil. Koneksi ssh yang berhasil melalui port 22 mungkin TIDAK terhubung ke server ssh tetapi ke sesuatu yang lain (misalnya localhost). Untuk membuktikan atau menghilangkan prasangka ini, setelah terhubung melalui tipe ssh

hostname

Berdasarkan apa yang dikatakan OP, saya menduga nama host tidak akan menjadi atlas server ssh.

Untuk lebih jauh mengisolasi ini, setelah me-reboot server ssh tetapi sebelum melakukan sesuatu lebih lanjut , dari sesi terminal pada tipe ssh server (Atlas)

ssh localhost

Jika ini gagal, sebagaimana mestinya, maka

ssh -p 54747 localhost

Jika ini tidak berhasil, itu akan mengkonfirmasi hasil yang diperoleh saat menjalankan

sudo service sshd status
jones0610
sumber
Hai! Saya menambahkan serangkaian acara agar Anda bisa lebih mengerti. Saya SSH menggunakan perintah ssh -p <PORT> <USER>@<IP>, dengan kunci pribadi saya ditambahkan ke agen.
3rgo
Baik sekali. Lakukan langkah 6a: pada server sshd, sudo service sshd status. Jika melaporkan port 22 maka ada file sshd_config palsu yang dipanggil.
jones0610
Mengatakan, "tidak aktif (mati)" (lihat output penuh dalam OP saya dalam detik)
3rgo
Jadi jika itu mati (tidak aktif dan berjalan) Anda tidak ssh-ing ke dalam mesin yang Anda pikir. Pada server sshd, ketik ps -ef | grep sshd. Jika daemon sshd pada server sshd benar-benar mati, tidak ada proses sshd yang akan berjalan dan dengan demikian Anda tidak akan dapat melakukannya; terlepas dari port yang digunakan.
jones0610
2 proses sshd ditemukan ... Saya telah menambahkan keluaran terperinci
3rgo
0

Mungkin Anda baru saja menjawab Y ketika mendeteksi perbedaan antara sshd_config dan paket Anda. Ia bertanya apakah Anda ingin menginstal versi paket mantainer atau menyimpan versi Anda.

Marco
sumber
1
Saya tidak ingat ditanya hal seperti itu, tetapi dengan asumsi itu masalahnya, apa yang bisa saya lakukan untuk memperbaikinya?
3rgo
0

Kemungkinan penyebab yang bisa saya pikirkan

  1. Binary sshd yang berbeda dimulai saat boot atau sshd dimulai dengan konfigurasi yang berbeda. Mungkin systemd adalah pelakunya di sini - ia memiliki cara berbeda untuk mengubah port, melalui file /usr/lib/systemd/system/sshd.socketrupanya: https://www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. / Etc / atau / etc / ssh yang benar belum terpasang ketika sshd dimulai, apakah ini merupakan volume terpisah pada mesin Anda yang akan dipasang kemudian dalam proses boot?
  3. sshd tidak memiliki izin baca untuk file konfigurasi saat boot, meskipun saya tidak tahu apakah sshd bahkan akan memulai kemudian sama sekali.
Jay
sumber
2
Saya rasa Anda menyukainya. Dan jika itu adalah server yang mengalami banyak upgrade, mungkin ada koktail skrip startup yang bertebaran (sysv-init, pemula, systemd) Mungkin pencarian sederhana dan periksa semua file di / etc / find /etc/ -iname "*ssh*"untuk mencari petunjuk lebih lanjut.
Bazz