web-dev-qa-db-ja.com

DebianサーバーにSSH接続すると、「チャネル0 stdinでPTY割り当て要求が失敗しました:ttyではありません」

私のホスティングスペース(Debian Wheezy)は2つのWebサイト(1つWordPressおよび1つのRails)を提供しています。今日、両方がダウンしていることを確認し、サーバーを再起動しました。Railsサイトが再び機能し、WordPressは、データベースへの接続にエラーがあると今言います。次に、再起動(SSHからも)した後、サーバーにSSH接続すると、次のメッセージが表示されます:

PTY allocation request failed on channel 0
stdin: is not a tty

-vフラグを指定して実行すると、奇妙なことは何も出力されません(公開鍵と秘密鍵を確認するだけです)。 this Gistを参照してください。

次のようにSSH接続すると、ssh user@Host "/bin/bash -i"がリモートシェルにログインできますcan

別の回答 (「bin/bash -i」を追加することでヒントも提供され、それが役立ちました)を読んで、/dev/pt*ファイルを手動で削除して再度追加する必要があります。質問した人は、/dev/ptsをアンマウントして再マウントすることでうまくいくと述べました。残念ながら私はエラーを受け取ります:

Can't find /dev/pts in /etc/fstab or /etc/mtab

私の/etc/fstabファイルは次のようになります:

#UNCONFIGURED FSTAB FOR BASE SYSTEM

誰かが何が起こっているのか、そして私がこれをどのように解決できるかについて何か考えがありますか?

tty; ls -l /proc/self/fdのローカル出力:

/dev/pts/2
total 0
lrwx------ 1 erwin erwin 64 Sep 13 19:01 0 -> /dev/pts/2
lrwx------ 1 erwin erwin 64 Sep 13 19:01 1 -> /dev/pts/2
lrwx------ 1 erwin erwin 64 Sep 13 19:01 2 -> /dev/pts/2
lr-x------ 1 erwin erwin 64 Sep 13 19:01 3 -> /proc/4389/fd

リモートマシン上のls -la /dev/ptmx /dev/ptsの出力:

crw-rw-rw- 1 root tty  5, 2 Sep 11 00:19 /dev/ptmx

/dev/pts:
total 8
drwxr-xr-x 2 root root 4096 Mar 10  2013 .
drwxr-xr-x 3 root root 4096 Sep 11 00:35 ..

18:10にssh root@Host "/bin/bash -i"を介してログインし、/var/logを調べました。 cronjobのほかに、編集された1つのファイルを見ました。

-rw-r----- 1 root        adm       614306 Sep 15 18:10 auth.log

およびsyslog(cronjob経由)。 PHPに関連する何かが30分ごとに発生したため、Syslogは偶然でした。

次に、scpを介してファイルをローカルにコピーしました。

auth.log:

Sep 15 18:10:23 vz1223 sshd[23681]: Accepted publickey for root from [localIp] port 39126 ssh2
Sep 15 18:10:23 vz1223 sshd[23681]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 15 18:12:14 vz1223 sshd[23681]: Received disconnect from [localIp]: 11: disconnected by user
Sep 15 18:12:14 vz1223 sshd[23681]: pam_unix(sshd:session): session closed for user root
Sep 15 18:12:29 vz1223 sshd[23700]: Accepted publickey for root from [localIp] port 39160 ssh2
Sep 15 18:12:29 vz1223 sshd[23700]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 15 18:12:29 vz1223 sshd[23700]: Received disconnect from [localIP]: 11: disconnected by user
Sep 15 18:12:29 vz1223 sshd[23700]: pam_unix(sshd:session): session closed for user root
Sep 15 18:12:47 vz1223 sshd[23709]: Accepted publickey for root from [localIp] port 39163 ssh2
Sep 15 18:12:47 vz1223 sshd[23709]: pam_unix(sshd:session): session opened for user root by (uid=0)

言ったように、同様の質問に対する this 回答によると、/dev/ptsを実行してumountmount my mount -t devpts -o OPTIONS devpts /dev/ptsを実行する必要があります。

mountを実行すると/dev/pts /が表示されず、mount /dev/pts/を実行するとcan't find /dev/pts in /etc/fstab or /etc/mtabが表示されます。 mountの出力は次のとおりです。

/home/vz/private/1223 on / type simfs (rw,relatime)<br>
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)<br>
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)<br>
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=6556k,mode=755)<br>
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)<br>
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=39320k)<br>

おそらく、/dev/ptsを再度マウントする必要がありますか?

ssh -vvv user@Hostを実行してさらにロギングすると、 this が得られます。

ホストでのnamei -lx /dev/ptsの結果:

f: /dev/pts
Drwxr-xr-x root root /
drwxr-xr-x root root dev
drwxr-xr-x root root pts

*/edit 6/rebootコマンドを介して「/bin/bash -i」を追加してSSHからサーバーをもう一度再起動すると、ターミナルは正常に戻りました...何が問題だったのか、何が解決したのかわかりません、それは再び動作します。

5

したがって、/dev/ptspseudo terminal s(何か;の意味がわからない)のカーネル内の仮想ファイルシステムです。 sysfs(/ sys)やprocfs(/ proc)と同様に、カーネルから一部のデータをエクスポートする仮想カーネルのみのファイルシステムです。ファイルシステムは、/dev/ptsdevptsというタイプでマウントする必要があります。

これは通常/etc/fstabには現れない特別なファイルシステムですが、マウントする必要があります。通常、ディストリビューションには必要なマウントを実行するための初期化スクリプトなどがあります。しかし、これが失敗することもあり、そのような問題が発生します。

Systemdベースのシステムでは、この問題は発生しなくなりました。 systemdは、devptsファイルシステムが確実にマウントされるようにします。

別のinitシステムを使用している場合、修正は使用するディストリビューションによって異なる場合があります。 sysvinitを使用するDebianでは、devptsファイルシステムはmountdevsubfs.sh initスクリプトによってマウントされます。この問題が再び発生した場合は、次の2つのいずれかを実行できます。

  • /etc/init.d/mountdevsubfs.sh restartを実行します
  • Initスクリプトをバイパスして、手動でmount -t devpts devpts /dev/ptsを実行します
1
Wouter Verhelst