スマートフォンなんかの空き箱

パソコン、スマートフォンみたいな家電製品を買うと、捨てるともったいないような気持ちになるので、基本的に箱を取っておく。
そうして何年もためてきたけど、さすがに邪魔に思うようになったので、捨てることにした。(しかし、Lumia 800とLumia 1020はレアだと思う。)
箱の中を確認して、USB電源アダプターやイヤフォンは小分けにして保存する。充電用のUSBハブは家中にあって、製品付属のUSBアダプターは使わなんだけど。
Appleのシールがたくさん見つかった。

技術情報 / SSH / PuTTY / RemoteCommand

RemoteCommand

RemoteCommandとは?

  • SSHログイン後に、シェル(/bin/bash等)の代わりに実行するコマンド。
  • 用途は下のようなものが考えられる。
    • “ssh another-server.com“と設定して、SSHで接続したサーバからそのまま別のサーバ(ここではanother-server.com)にSSH接続する。多段SSH接続。
    • “ps aux”と設定して、接続したサーバのプロセス情報を取得する。コマンドラインからplink.exeで接続すればリダイレクトで結果をファイルに書き込める。

手順

GUIで指定する

  • PuTTY Configurationダイアログを開く。
  • 通常の接続設定を行う。
  • “Connection”->”SSH”を選ぶ。
  • “Data to send to the server”の”Remote command”に以下のようにコマンドを設定する。
touch 1.txt; touch 2.txt; ls -l
  • この接続設定を開いてサーバに接続する。

コマンドラインから指定する

  • コマンドファイルを作成する:notepad.exe commands.sh
touch 1.txt
touch 2.txt
ls -l
  • -mオプションを付けて、サーバに接続する。
plink.exe -m commands.sh 192.168.0.1

注意

  • 非疑似端末モードになるので、必要に応じて、-tオプションを付けて強制的に疑似端末モードにする。

参考

the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter7.html#plink

技術情報 / SSH / PuTTY / PuTTYの環境変数をサーバへ渡す (Environment variables)

PuTTYの環境変数をサーバへ渡す (Environment variables)

PuTTYの設定

  • 設定ダイアログを開く。
  • “Connection”->”Data”を開く。
  • “Environment variables”の”Variable”と”Value”を入力して”Add”ボタンを押下し、環境変数を登録する。ここでは以下のようにした。
    • Variable: PUTTY_OK
    • Value: 1

OpenSSHサーバの設定

  • /etc/ssh/sshd_configを開く。
  • 以下の設定を記述する。複数の設定をする際はスペースで区切って並べる。詳しくはman sshd_configを参照の事。
    • AcceptEnv PUTTY_OK

補足:サーバだけで環境変数を設定するには?

  • PermitUserEnvironmentを設定する。

技術情報 / SSH / OpenSSH / ローカルポートフォワード

ArrayObjectクラスとArrayIteratorクラス

ArrayObjectクラスを継承して配列クラスを作る

class MyArrObj extends ArrayObject {
    function __construct($arr) {
        parent::__construct($arr);
    }
    function double() {
        $arr = $this->getArrayCopy();
        return new MyArrObj(array_merge($arr, $arr));
    }
}

配列の走査

配列クラスをイテレータを使って走査する 1

$arrObj = new MyArrObj(array(1,2,3));
$it = $arrObj->getIterator();
while ($it->valid()) {
    $k = $it->key();
    $v = $it->current();
    printf("%s : %s\n", $k, $v);
    $it->next();
}

配列クラスをイテレータを使って走査する 2

$arrObj = new MyArrObj(array(1,2,3));
$it = $arrObj->getIterator();
foreach ($it as $k => $v) {
    printf("%s : %s\n", $k, $v);
}

配列クラスを配列変数的に走査する

$arrObj = new MyArrObj(array(1,2,3));
foreach ($arrObj as $k => $v) {
    printf("%s : %s\n", $k, $v);
}

配列クラスにメソッドを使って値を追加する

$arrObj->append('4');

配列クラスに配列キーワードを使って値を追加する

$arrObj[] = 5;

配列クラスに定義されたメソッドを使う

$arr2 = $arrObj->double();

ArrayIteratorクラスを継承して配列イテレータークラスを作る

class MyArrIt extends ArrayIterator {
    function isEven() {
        $k = $this->key();
        return $k % 2 === 0 ? true : false;
    }
}

配列クラスのイテレーターを変更する

$arrObj->setIteratorClass('MyArrIt');

配列イテレータークラスに定義されたメソッドを使う

$it = $arrObj->getIterator();
foreach ($it as $k => $v) {
    $x = $it->isEven() ? 'O' : 'X';
    printf("%s %s : %s\n", $x, $k, $v);
}

参考

技術情報 / SSH / OpenSSH / リモートポートフォワード

リモートポートフォワード

リモートポートフォワードとは?

     ○ <----- 
          #
[サーバ1]  # [サーバ2]
          # 
        -----> ×
  • サーバ1とサーバ2があるとする。
  • サーバ2からサーバ1へは接続出来るが、サーバ2はファイヤウォール内なので、サーバ1からサーバ2へ接続出来ないとする。
  • このような環境で、サーバ2上でサーバ1へリモートポートフォワードを行うと、それで作成されたコネクションを利用し、サーバ1からサーバ2へ接続出来るようになる。
  • リモートポートフォワードのコネクションを切断すると、サーバ1からサーバ2への接続は再び出来なくなる。
  • リモートポートフォワードを使って、一時的な接続が可能になる。

remote1.comからremote2へ一時的にSSH接続を出来るようにする手順

remote2.com上でリモートポートフォワードを実行する

[remote2.com]$ ssh -f -N -R 10022:localhost:22 -l rmeote1-user -p 22 remote1.com

これでreomote2.comからremote1.comへのコネクションが作成され、remote1.com上の10022番ポートが開く。

remote1.comからremote2.comへSSH接続する

[remote1.com]$ ssh -p 10022 localhost

remote1.com上の10022番ポートに接続すると、remote2.com上の22番ポート(すなわちSSHポート)に転送されるので、上のコマンドでSSH接続出来る。

remote2.com上からコネクションを切断する

[remote2.com]$ ps auxw | grep ssh
[remote2.com]$ kill XXX

リモートポートフォワードのコネクションを切断すると、同時にremote1.comからremote2.comへのSSH接続も強制切断される。

参考

技術情報 / SSH / OpenSSH / ssh_config

ssh_config

Hostのワイルドカードによる指定

Host x.example.com
User foo
IdentityFile ~/.ssh/id_rsa_for_host_x

Host *
User bar
IdentityFile ~/.ssh/id_rsa

Hostのワイルドカードは最初にマッチする項目が採用されるので、グローバルな設定はconfigの最後に書く。

参考

unix.stackexchange.com/questions/16571/multiple-host-in-ssh-config

技術情報 / SSH / OpenSSH / iptables管理下での接続ポート変更

iptables管理下での接続ポート変更

目的

  • iptablesにて管理しているUNIXサーバのSSH接続ポートを標準の22から別のポートに変更する。
  • この変更はクライアントPCからUNIXサーバにSSHで接続してリモート作業にて行う。

手順

  • 新しいSSH接続ポートを決める。
  • クライアントPCからUNIXサーバにSSHでポート22にて接続する。
  • iptablesに新しいポートの接続許可の設定を追加する。
  • iptablesを再起動する。
  • sshd_configのPortを新しいSSH接続ポートに修正する。
  • sshdを再起動する。
  • 今接続しているSSHとは別に、クライアントPCからUNIXサーバにSSHで新しいポートにて接続して、接続可能な事を確認する。
  • iptablesのポート22の接続許可の設定を削除する。
  • iptablesを再起動する。
  • 今接続しているSSHとは別に、クライアントPCからUNIXサーバにSSHでポート22にて接続して、接続不可能な事を確認する。
  • 今接続しているSSHとは別に、クライアントPCからUNIXサーバにSSHで新しいポートにて接続して、接続可能な事を確認する。

技術情報 / SSH / OpenSSH / ssh-keygen

ssh-keygen

作成

ssh-keygen -t rsa

ファイル名を指定

ssh-keygen -t rsa -f ~/.ssh/foo
  => ~/.ssh/foo と ~/.ssh/foo.pubができる

コメントを指定

ssh-keygen -t rsa -C this-is-my-key

鍵のフィンガープリントの確認

ssh-keygen -l -f ~/.ssh/id_rsa
-l Show fingerprint of specified public key file.  Private RSA1 keys are also supported.  For RSA and DSA keys ssh-keygen
   tries to find the matching public key file and prints its fingerprint.  If combined with -v, an ASCII art representa-
   tion of the key is supplied with the fingerprint.

暗号化 2010年問題

参考

serverfault.com/search?q=ssh+keygen+rsa