SSHポートを22から23453に変更すると、sshでログインできなくなります。
詳しくは、Amazon Web ServicesでRed Hat EC2インスタンスを使用しています。これは、フレッシュインストールでの2番目の変更です(最初の変更は、非rootユーザーを追加することでした)。
Git Bashとローカルの.ssh/configファイルを使用してうまくsshできます。/etc/ssh/sshd_configの現在の行を編集します
_#Port 23453
_
言う
_Port 23453
_
次にsshdを再起動します
_Sudo service sshd restart
_
次に、.ssh/configファイルに「Port 23453」という行を追加します。
_Host foo
Hostname my-ec2-public-DNS
Port 23453
IdentityFile my ssl key
_
(既存の接続を閉じずに)別のGit Bashシェルを開き、(ssh fooを使用して)インスタンスにSSH接続しようとすると、次のエラーが表示されます。
_ssh: connect to Host my-ec2-public-DNS port 23453: Bad file number
_
このインスタンスにアタッチされているセキュリティグループには2つのエントリがあり、どちらもTCP
22 (SSH) 0.0.0.0/0
_23453 0.0.0.0/0
_
私の推測では、ポートはまだファイアウォールによってブロックされています。
_Sudo 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
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
_
かなりオープンに見えます。
[〜#〜]更新[〜#〜]
Iptablesルールを追加した後
_iptables -A INPUT -p tcp --dport 23453 -j ACCEPT
_
もう一度試してもまだ運がありません。
_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
_
十分に開いているように見えます。ポートで着信するパケットやアクティビティを探す方法が完全にわかりません。しかし、_netstat -ntlp
_の出力(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
_
23453でsshdを表示するように思えます。
インスタンスのセキュリティグループでポートが開いていることを再度確認しました(ポート:23453、プロトコル:tcp、ソース:0.0.0.0/0)。
SSH経由で接続できなかった原因は他にありますか?
乾杯
[〜#〜]事後[〜#〜]
接続できるようになりました。 iptablesには欠けていたルールでした。 _iptables -L
_の出力は次のようになります。
_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
_
インスタンスのファイアウォールでこのポートが開いていません。次のコマンドを試してください。
iptables -I INPUT 3 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23453 -m state --state New -j ACCEPT
再起動後も存続させるには、iptablesルールを保存する必要があることに注意してください。 RHELの場合:
/sbin/service iptables save
Iptablesルールを追加する
iptables -I INPUT 1 -p tcp --dport 23435 -j ACCEPT
これは、ポート23435で任意のホストからのトラフィックを受け入れ、sshを試行します。パケットまたはアクティビティが表示される場合は、パケットがサーバーに到達していることを意味します。
パケットが表示されない場合は、AWSセキュリティグループにポートを許可するルールがないことを意味します。
ただし、このルール(iptables -nvL
による)のトラフィックが表示される場合は、「netstat -ntlp」を実行して、SSHデーモンがポート2435および0.0.0.0/0
で実行されているかどうかを確認する必要があります。
うまくいけば、これらの手順で問題が解決します。それでもいいえの場合は、教えてください。
セキュリティグループが正しく設定されていますか? 「変更を適用」をクリックしましたか?多くの人は実際に変更を適用するのを忘れています:)
「不良ファイル番号」は通常、接続タイムアウトを示し、iptablesの設定は正しいように見えます。
Sshのデフォルトポートが変更されたためにこのトピックを見つけた場合、解決策は次のとおりです。
/etc/ssh/sshd_conf
のポートを80に変更しました。