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

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

PuTTY / SSH / 技術情報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

PuTTY / SSH / 技術情報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を設定する。

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

ローカルポートフォワード

RemoteHostAにログインする

ssh -f -L 10022:RemoteHostA:22 RemoteHostA sleep 100000
ssh -p 10022 -oHostAliasKey=RemoteHostA localhost
-L XXX
ローカルホストのXXXポートを利用するように指定する。
-f
ポートフォワードをバックエンドで待機させておくためのオプション
sleep 1000000
-f オプションを使う場合、なんらかのシェルコマンドを指定する必要がある。ループするシェルコマンドはまずいらしいので、長時間のsleepを指定するのが一般的なようだ。
HostAliasKey
これがないとローカルのSSHがリモートサーバのサーバーキーを確認する時に警告を表示して、処理が止まる。サーバーキーの確認をしないようにすることで回避する方法もあるようだ。

RemoteHostAを経由し、RemoteHostBにログインする

ssh -f -N -L 10022:RemoteHostB:22 HostAUser@RemoteHostA
ssh -l HostBUser -p 10022 -oHostKeyAlias=RemoteHostB localhost

-N
:リモートでシェルコマンドを実行しなくル。上のコマンド例でsleep 100000の記述を不要にできる。

設定ファイルを利用して省力化

上の「RemoteHostAを経由し、RemoteHostBにログインする」を省力化する。

$HOME/.ssh/configを以下のように編集する。
Host tunnelToHostB
HostName RemoteHostA
User HostAuser
Compression yes
Port 22
LocalForward 10022 RemoteHostB:22

Host HostB
HostName localhost
user HostBuser
Port 10022
HostKeyAlias RmoteHostB

これを利用するには以下のようにコマンドを入力する。
ssh -f -N tunnelToHostB (HostBまでのトンネルが掘られる)
ssh HostB(HostBにSSH接続する)

さらに省力化するには以下のようなシェルスクリプトを書いておくとよい。
#/bin/sh
ssh -q -f -N tunnelToHostB
ssh HostB

注意点

  • リモートサーバ側のsshd_configを以下のようにする。
    AllowTcpForwarding yes
  • リモートサーバ側のSSHDのアクセス制御で自サーバからの接続を許可する。tcp wrapperなら、hosts.allowを以下のようにする。
    sshd : 100.200.100.200 : allow
    (リモートサーバ側のIPアドレスを100.200.100.200とした場合)

参考

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

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

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

     ○ <----- 
          #
[サーバ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接続も強制切断される。

参考

OpenSSH / SSH / 技術情報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

OpenSSH / SSH / 技術情報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で新しいポートにて接続して、接続可能な事を確認する。

OpenSSH / SSH / 技術情報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