2009/05/22(Fri)2段ssh

2009/05/22 1:28 Software::Linux
最近ではネットワークの隠蔽性を高めるため、インターネットから直接リーチャブルでない(到達できない)場所にSSHサーバーがいることもある。
ここに対してsshセッションを外側張りたい場合、基本的には、インターネットからリーチャブルなゲートウェイの働きをするsshdを通して、その中でさらにssh、つまり2段sshをやるわけだが、sshコマンドを2回も打つのがめんどくさい。どうにか1コマンドで済まないものか。

続きを読む

2009/03/03(Tue)特定のホストからだけsshの公開鍵認証ができない

2009/03/03 21:38 Software::Linux
ちょっと前からssh公開鍵認証が使えなくなって困っていた。
不思議なことに、公開鍵認証が通るホストもあるのだが、あるホストからは何度鍵を作り直したり、パーミッションを確認してみても通らない。
sshコマンドに-v等と付けて様子を見ていたが、これという原因が分からなくて悩んでいたのだけど、やっと解決。
脆弱性のあるlibsslを使って公開鍵を作成していたのが原因ということだった。

続きを読む

2008/12/09(Tue)小規模サーバーの静音化

2008/12/09 20:16 Software::Linux
出先から自宅のPCをちょちょっと操作したいときを考えて、自宅にWoL用のSSH/HTTPサーバー*1を走らせているが、HDDを換装してからモーター音が気になるようになった。
実は世代的にはかなり前のもう10年くらい前に作られたHDDだし。

で、気になるレベルであるが、30秒置きくらいに何か書いている感じ。
スピンダウン時間設定が全くの無駄じゃないか!カリカリうるさいし……。

というわけで、静音化にチャレンジしてみました。

続きを読む

2008/09/14(Sun)screenでデタッチできない 解決編

2008/09/14 21:21 Software::Linux
screenでデタッチできないというのを書いたが、解決法発見。
デタッチできないというよりも、むしろアタッチできないという方が正しい表現だったようだ。

これはscreenの問題ではなく、回線が切れたときにsshセッションが切れず、sshdプロセスが生きたままで、その応答待ちでscreenがattachedから変化しない模様。

以下、対処法。
$ ps x | grep pts | grep sshd
13819 ?        S      0:00 sshd: kero@pts/2
13985 ?        S      0:00 sshd: kero@pts/8
14595 pts/2    S+     0:00 grep sshd

grepが走っているpts/2が現在操作中のポートなので、pts/8を落とす。

$ kill -KILL 13985

$ screen -ls
There is a screen on:
        9120.pts-0.spinel       (Multi, detached)
1 Socket in /var/run/screen/S-kero.

$ screen -r
これで自動的にdetatchされ(autodetatchがonの場合)再アタッチ可能になる。


が、いちいちこんな事やるのが面倒なので、自分以外のsshセッションを片っ端から強制終了するスクリプトを書いてみた。
最近Perlの正規表現にハマってたりなので…。/bin/sh+sedかawk…と思いつつも、慣れてる方が書きやすい。
だいたい検証したけど、killのとこだけは検証してない…。たぶん大丈夫。ちゃんと動きました。
screenの内側から実行しないように注意。
#!/usr/bin/perl
use strict;

(my $tty = `echo -n \$SSH_TTY`) =~ s/\/dev\///;
my $dead = `ps x | grep pts | grep sshd | grep -v $tty | grep -v grep`;
foreach(split(/\n/, $dead)){
    $_ =~ s/^\s*(\d+).+$/$1/;
    print qq|Kill pid=$_...\n|;
    `kill -KILL $_`;
}

参考元:http://subtech.g.hatena.ne.jp/cho45/20070517/1179373075