上記を読んで、すべてを一緒に接着した後、私は以下のPerlスクリプトを作成しました(/usr/binにmsshとして保存して実行可能にします):
#!/usr/bin/perl
$iport = 13021;
$first = 1;
foreach (@ARGV) {
if (/^-/) {
$args .= " $_";
}
elsif (/^((.+)@)?([^:]+):?(\d+)?$/) {
$user = $1;
$host = $3;
$port = $4 || 22;
if ($first) {
$cmd = "ssh ${user}${host} -p $port -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no";
$args = '';
$first = 0;
}
else {
$cmd .= " -L $iport:$host:$port";
push @cmds, "$cmd -f sleep 10 $args";
$cmd = "ssh ${user}localhost -p $iport -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no";
$args = '';
$iport ++;
}
}
}
push @cmds, "$cmd $args";
foreach (@cmds) {
print "$_\n";
system($_);
}
使用法:
HOSTAとHOSTB経由でHOSTCにアクセスするには(同じユーザー)。
mssh HOSTA HOSTB HOSTC
HOSTA と HOSTB 経由で HOSTC にアクセスし、デフォルト以外の SSH ポート番号と異なるユーザを使用するには:
mssh user1@HOSTA:1234 user2@HOSTB:1222 user3@HOSTC:78231
HOSTA と HOSTB 経由で HOSTC にアクセスし、X 転送を使用するには:
mssh HOSTA HOSTB HOSTC -X
HOSTA と HOSTB 経由で HOSTC のポート 8080 にアクセスするには:
mssh HOSTA HOSTB -L8080:HOSTC:8080