
Ubuntu日本語フォーラム

ログインしていません。
SSHをポートフォワードするために使用しています。
しかし、数分で接続が切れてしまうため、
対症療法的ですが、現状ではautosshを用いて対策を行っています。
クライアント側はプロキシを通さなければ外部に接続できません。
プロキシでは22番ポートでの通信が許可されていないようでしたので、
利用可能な443番ポートを用いてSSH接続を行っています。
http://lists.debian.or.jp/debian-users/200710/msg00050.html
上記サイトに書かれているように、
サーバー側でClientAliveIntervalを設定し、
クライアント側でServerAliveInterval無しにしてみましたが、
相変わらず数分程度で接続が切れてしまいます。
なお、Tera Termでの端末操作時は切断されることはありません。
半日ほど放置しても切断されませんでした。
TTSSHの設定でハートビート(keep-alive)を60秒に設定しており、
これが効いているのだと思われます。
どうしてもLinux機で接続を維持させたい事情があるので、
何か解決方法に心当たりがありましたら教えていただけないでしょうか?
[サーバー側]
Ubuntu 12.04 64bit
OpenSSH_5.9p1 Debian-5ubuntu1.1, OpenSSL 1.0.1 14 Mar 2012
Protocol 2
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 15
[クライアント側]
Ubuntu 10.04 32bit
OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 Mar 2009
ProxyCommand connect -H ****:8080 %h %p
Port 443
Protocol 2
Ciphers aes256-ctr
IdentityFile /root/.ssh/id_rsa
IdentitiesOnly yes
GatewayPorts yes
StrictHostKeyChecking no
オフライン
TCPKeepAliveは、どちらかといえばネットワーク経路の確認。(標準では yes)
サーバーとクライアントが正常でも一時的なネットワーク経路の切断等で切れる場合がある。
opensshではTCPKeepAliveの間隔を指定するオプションは無い。
ubuntu(システム)としては、以下の様になっている。
$ cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
つまり2時間に1回。
数分で切れてしまう現象や、teratermでTCPKeepAliveが10秒ならば問題無いと言う事は、逆を言えばsshが原因ではない?
サーバー側設定でClientAliveIntervalは、クライアントに対して応答を求める間隔。
(生存確認メッセージは暗号化された通信を経由して送られる。)
サーバー側設定でClientAliveCountMaxは、クライアントの応答が連続で無反応な場合の最大カウント数。
ClientAliveInterval 60 (標準では"0")
ClientAliveCountMax 15 (標準では"3")
だと60秒に1回応答確認をし、15回連続で応答が無かった場合切断する。
つまり約15分なので、数分で切れると言う現象から考えるとやはりsshが原因ではない?
そもそもクライアントに対してなのだからssh端末が相手じゃないと意味がない?(ポートフォワードまでカバーしていない?)
"openssh TCPKeepAlive 切断"等で検索するとルーター側のNAT設定等に問題がある様な記述が見付けられます。
但し、ルーターはメーカーによって設定項目が違うのでどうやればいいのかは解りません。
回答ありがとうございます。
ちゃんと時間測ってなかったので数分と書いたのですが、
先程測ってみますと、およそ15分程度で切れていました。
あやふやな表現をして申し訳ありませんでした。
ポートフォワードに使っている、と書きましたが、
バックグラウンドで動かしているものの、一応端末も取得している・・・はずです。
screen上でautosshを実行し、デタッチした状態で使っています。
クライアント側のルーターは自分で弄る権限がないので、設定を変えたりすることは難しいです。
サーバーの方は自宅側なので、好きにいじれますが。
プロキシも同様に弄ることはできません。
この辺りを弄らないと、この問題は解消しないのでしょうか?
TeraTermやWinSCPだと切れることは無いので、どうにも納得が行きません。
オフライン
こんにちは。クライアント側に、
ServerAliveInterval 60
を設定したらうまくいくのではないでしょうか?
オフライン
http://lists.debian.or.jp/debian-users/200710/msg00050.html
上のページに書かれているように、ClientAliveIntervalとServerAliveIntervalを
両方とも使うとうまくいきませんでした。
今回試しに、ClientAliveIntervalを使わず、ServerAliveIntervalのみ設定してみました。
ServerAliveInterval 60
ServerAliveCountMax 3
この設定でつないで放置したところ、約10分で切断されてしまいました。
60*3=3分ほどで切断されるはずですが、なぜかそこは乗り越えたにもかかわらず切断されました。
設定自体は正常に稼働しているものの、たまたま運悪く3回連続で応答がなかっただけなのでしょうか?
その割には2回試して2回ともそれくらいで切れたのが気になりますが・・・。
とりあえず次はServerAliveCountMaxの値を増やして試してみます。
オフライン
こんにちは。サーバー側のSSHのログは以下に出力されていると思いますが、
/var/log/auth.log
こちらに何か特徴的な記録は無いでしょうか。
また、クライアントからSSH接続する際に-vや-vvなどのオプションをつけると
デバッグ情報が出力されますが、そこで何が理由で切断されたのかの情報が出ていないでしょうか。
オフライン
返信ありがとうございます。
ログを見たところ、以下の様な記述がありました。
[/var/log/auth.log]
Jul 9 12:49:33 ubuntu sshd[22875]: Accepted publickey for centos from (クライアント側IP) port 37343 ssh2
Jul 9 12:59:47 ubuntu sshd[22877]: Received disconnect from (クライアント側IP): 11: disconnected by user
Jul 9 12:59:47 ubuntu sshd[24459]: Did not receive identification string from 127.0.0.1
また、-vvオプションを付けた時の切断時のメッセージは以下のとおりでした。
debug1: Connection to port 443 forwarding to 127.0.0.1 port 443 requested.
debug2: fd 13 setting TCP_NODELAY
debug2: fd 13 setting O_NONBLOCK
debug1: channel 6: new [direct-tcpip]
debug2: channel 6: open confirm rwindow 2097152 rmax 32768
debug1: channel 0: free: port listener, nchannels 7
debug1: channel 1: free: port listener, nchannels 6
debug1: channel 2: free: port listener, nchannels 5
debug1: channel 3: free: port listener, nchannels 4
debug1: channel 4: free: client-session, nchannels 3
debug1: channel 5: free: 127.0.0.1, nchannels 2
debug1: channel 6: free: direct-tcpip: listening port 443 for 127.0.0.1 port 443, connect from 127.0.0.1 port 60784, nchannels 1
debug1: Killed by signal 15.
ところで、これをやってて気がついたのですが、
autosshを使わずにsshコマンドで接続していると、10分程度経過しても切断されないことがわかりました。
このことから、autossh側の問題だと思うのですが、相変わらず解決策はわかりません。
ログやデバッグメッセージなど、次はどこを見ていけば良いでしょうか?
オフライン
ログありがとうございます。クライアント側の問題のようですね。
autosshが10分毎に切れるのは下記が原因ではないかと思います。
https://twitter.com/coalice/status/159526774290657280
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=351162
上記記事で、autossh の-Mオプションで別ポートを指定してトライすることが書かれてあります。
でも443ポートしか空いていないのですよね。複数台クライアントから接続していないでしょうか?
オフライン
お返事有り難うございます。
21ポートで使おうとして、開いていなかったので、
443ポートなら開いているだろうということでこのポートを使っています。
他にも開いているポートはあるかもしれませんが、調べ方がわかりません。
何らかのコマンドで調べたりできるのでしょうか?
今のところ、Ubuntu機以外にも、Windows機のTeraTermから接続している時があります。
こちらも同様で、443ポートを使用しています。
TeraTermであれば、いくつも接続しても何ともないのですが、autosshではダメなんですね。
切断時にsshコマンドを再度呼んでいるだけだと思っていたのですが、
そう単純なものでもないのでしょうね。
とりあえず、今は無限ループのシェルスクリプト内からsshコマンドを呼び出して対処しています。
実用上はこれで問題ないのですが、もし他にも解決方法があるなら教えていただきたいです。
オフライン