Jika saya mengubah port SSH saya dari 22 ke 23453, saya tidak bisa lagi ssh in.
Secara lebih rinci, saya menggunakan contoh Red Hat EC2 di Amazon Web Services. Ini adalah perubahan kedua yang telah saya instal baru (perubahan pertama adalah menambahkan pengguna non-root).
Saya dapat ssh di baik menggunakan Git Bash dan file .ssh / config lokal, saya mengedit baris di / etc / ssh / sshd_config yang saat ini mengatakan
#Port 23453
untuk mengatakan
Port 23453
kemudian mulai kembali sshd dengan
sudo service sshd restart
Saya kemudian menambahkan baris "Port 23453" file .ssh / config saya
Host foo
Hostname my-ec2-public-DNS
Port 23453
IdentityFile my ssl key
Jika saya membuka shell Git Bash lain (tanpa menutup koneksi saya yang ada) dan mencoba ssh ke instance saya (dengan ssh foo) saya melihat kesalahan berikut:
ssh: connect to host my-ec2-public-DNS port 23453: Bad file number
Grup keamanan yang terlampir pada instance ini memiliki dua entri, keduanya TCP
22 (SSH) 0.0.0.0/0
23453 0.0.0.0/0
Tebakan terbaik saya adalah bahwa port tersebut masih diblokir oleh firewall saya.
Outputnya sudo iptables -L
adalah sebagai berikut
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Yang terlihat cukup terbuka bagiku.
MEMPERBARUI
Setelah menambahkan aturan iptables
iptables -A INPUT -p tcp --dport 23453 -j ACCEPT
dan mencoba lagi, masih belum berhasil.
Output dari iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ACCEPT tcp -- anywhere anywhere tcp dpt:23453
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Yang terlihat cukup terbuka. Saya tidak sepenuhnya yakin bagaimana mencari paket yang masuk atau aktivitas di pelabuhan. Tetapi output dari netstat -ntlp
(sebagai root)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:56137 0.0.0.0:* LISTEN 948/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 930/rpcbind
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1012/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1224/master
tcp 0 0 0.0.0.0:23453 0.0.0.0:* LISTEN 32638/sshd
tcp 0 0 :::36139 :::* LISTEN 948/rpc.statd
tcp 0 0 :::111 :::* LISTEN 930/rpcbind
tcp 0 0 ::1:631 :::* LISTEN 1012/cupsd
tcp 0 0 :::23453 :::* LISTEN 32638/sshd
Yang menurut saya menunjukkan sshd pada 23453.
Saya telah memeriksa lagi bahwa instance memiliki port terbuka di grup keamanan (Port: 23453, Protokol: tcp, Sumber: 0.0.0.0/0)
Apa lagi yang bisa menyebabkan kegagalan untuk terhubung melalui SSH?
Bersulang
POSTMORTEM
Saya sekarang dapat terhubung. Itu aturan yang hilang di iptables. Output dari iptables -L
sekarang terlihat seperti ini:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:23453 state NEW
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
sumber
iptables -L
(ssh berfungsi) dan yang keduaiptables -L
(ssh diblokir). Lihatlah urutan aturan dalam rantai INPUT (6 baris di bawah "target" pertama), mereka dibaca dari atas ke bawah, jadi di set aturan kedua, "TOLAKKAN semua" dipukul sebelum "ACCEPT tcp dpt: 23453 ". Set ketiga aturan memiliki entri MENERIMA di atas, dan karenanya sebelumnya, entri MENOLAK.Jawaban:
Firewall contoh Anda tidak memiliki port ini terbuka. Coba perintah berikut:
Perhatikan bahwa aturan iptables perlu disimpan agar tetap ada setelah reboot. Di RHEL itu:
sumber
/sbin/service iptables save
tidak bekerja untuk saya, bahkan dengan sudo.Tambahkan aturan iptables
yang menerima lalu lintas dari host mana pun, dengan port 23435, dan mencoba ssh, jika Anda melihat paket atau aktivitas apa pun, maka itu berarti bahwa paket tersebut mencapai server Anda.
Jika Anda tidak melihat paket, itu berarti bahwa grup AWS Security tidak memiliki aturan untuk mengizinkan port Anda.
tetapi jika Anda melihat lalu lintas pada aturan ini (oleh
iptables -nvL
), maka Anda harus menjalankan "netstat -ntlp" dan memverifikasi apakah daemon SSH berjalan pada port 2435. dan seterusnya0.0.0.0/0
.semoga langkah-langkah ini akan menyelesaikan masalah. jika masih tidak ada, maka beri tahu saya.
sumber
Apakah Anda yakin grup keamanan diatur dengan benar? Apakah Anda mengklik "Terapkan perubahan"? Banyak orang lupa untuk benar-benar menerapkan perubahan mereka :)
"Nomor file buruk" biasanya menandakan waktu habis koneksi, dan pengaturan iptables Anda terlihat benar.
sumber
Jika ada yang menemukan topik ini karena mereka mengubah port default ssh, berikut ini adalah solusi yang sesuai untuk saya:
/etc/ssh/sshd_conf
.sumber