セキュリティ対策をいろいろやっているLinuxサーバに対して、scpを使ってファイルを転送しようとしたところ、問題が発生した。
Windows上からTeraTermを使って転送を試みたところ、下記のエラーとなった。
SSH2_MSG_CHANNEL_OPEN_FAILURE を受信しました.
チャネル[1]: 理由: administratively prohibited(1) メッセージ: openfailed
でも、他のLinux上からscpコマンドでコピーすると、うまくいく。
謎なので、とりあえず、サーバ上のsshdをデバグモードで起動し、状況を確認してみる
# service sshd stop
Shutting down the listening SSH daemon done
# /usr/sbin/sshd -d
debug1: sshd version OpenSSH_6.2, OpenSSL 0.9.8j-fips 07 Jan 2009
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: private host key: #1 type 2 DSA
debug1: read PEM private key done: type ECDSA
debug1: private host key: #2 type 3 ECDSA
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-d'
Set /proc/self/oom_score_adj from 0 to -1000
<略>
debug1: server_input_channel_open: ctype session rchan 1 win 131072 max 32768
debug1: input_session_request
debug1: channel 1: new [server-session]
debug1: session_open: channel 1
no more sessions
debug1: session open failed, free channel 1
debug1: channel 1: free: server-session, nchannels 2
debug1: server_input_channel_open: failure session
ファイル転送用の追加セッションを作ろうとしたところで「no more sessions」というメッセージで作成に失敗している。
/etc/ssh/sshd_configを確認すると「MaxSessions 1」と設定されていた。
このため、「MaxSessions 2」に変更し、sshdを再起動したところ、TeraTermからもSCPでファイルコピーが行えるようになった。
結局のところ、TeraTermのscp機能は、今使っているsshセッションとは別にscp用セッションを作るので数が足らない、という話だった。