Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

2008年9月6日土曜日

ssh,sftp,scpの使い方 このエントリーを含むはてなブックマーク

本記事では、ssh,sftp,scpの使い方をまとめる。これらは、ネットワーク上のホスト間で暗号化による安全な接続を確立して、操作を行うためのツールです。

sshの使い方

sshはリモートホストにログインして、リモートホスト上のコマンドを実行するためのツールです。暗号化によって安全な接続を確立することができます。

sshで接続するサーバが既にあれば良いのですが、自分でサーバを立てる場合は本サイトの記事「sshサーバの設定」を参照ください。

基本的な書式は次の通りです。リモートサーバ(example.com)のログインアカウント(user)にログインする場合です。

$ ssh user@example.com

もしuser@example.com commandという書式で実行したら、ログインシェルの代わりにコマンドcommandが実行される。

指定できるオプションをいくつか紹介します。

-1
プロトコル1で接続することを強制する。
-2
プロトコル2で接続することを強制する。
-4
IPv4のアドレスを使って接続することを強制する。
-6
IPv6のアドレスを使って接続することを強制する。
-C
すべてのデータ(標準入力、標準出力、標準エラー出力、転送されるX11,TCP接続のデータを含む)の圧縮を要求する。gzipと同じ圧縮アルゴリズムを使う。低速なネットワーク接続を利用しているときは圧縮することが望ましいが、接続が十分高速なときは単に処理速度が低下するだろう(圧縮コストのためだろうか?)。このオプションは大文字のO(オー)であることに注意!
-F configfile
ユーザ毎の設定ファイルを指定する。このオプションが指定されるときは、システムの設定ファイル(/etc/ssh/ssh_config)は無視されるだろう。デフォルトのユーザ設定ファイルは(~/.ssh/config)である。
-f
コマンドを実行する前にsshがバックグラウンドで走ることを要求する。
-i identity
RSAあるいはDSA認証で読み込まれるprivate keyの書かれたファイルを指定する。デフォルトでは、プロトコル1のときは~/.ssh/identityを読み込み、プロトコル2のときはRSA認証は~/.ssh/id_rsaで、DSA認証は~/.ssh/id_dsaである。このファイルはユーザ毎の設定ファイルでも指定しても良い。また複数のファイルをこのオプションで指定することもできる。
-L port:host:hostport
ローカルホスト(クライアント)のポート(port)がリモート側のホスト(host)とポート(hostport)に転送されることを指定する。
-l login_name
リモートサーバへのログインアカウントを指定する。これはユーザ毎の設定ファイルで指定しても良い。
-N
リモートコマンドを実行しないことを要求する。これは、(プロトコル2で)単にポート転送のときにだけ役に立つ。
-n
/dev/nullからの標準入力にリダイレクトする(標準入力から読み込むことを阻止する)。これは、バックグラウンドでsshが走っているときに使われなければならない。リモートサーバでX11プログラムを走らせるときによく使われるトリック。例えば、ssh -n
-p port
リモートサーバの接続ポートを指定する。ユーザ毎の設定ファイルで指定しても良い。
-q
すべての警告や診断メッセージが抑制される"静かな"モード。深刻なエラー(fatal error)だけが表示される。
-V
sshのバージョンを表示して、終了する。
-v
詳細な表示モード。デバッギングメッセージを表示する。
-X
X11転送を有効にする。これはユーザ毎の設定ファイルで指定しても良い。
-x
X11転送を無効にする。

SSHポートフォワード

SSH経由でPOPアクセスするときに、ポート転送を使います。ローカルホストの使われていない1024番以降の任意のポートをリモートサーバのpopサービス用ポート(通常は110)に転送して、TCP接続を確立する方法です。詳細は「Secure POP via SSH mini-HOWTO」を参照ください。

どのように実現するのか具体的に簡単に説明します。まず、SSHポート転送でリモートホストのsleepコマンドを1000秒間実行します。

$ ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 1000

1000秒の間にTCP接続が確立しなかったら、SSHは終了します。一方、1000秒以内にメールクライアントでTCP接続を確立するとTCP接続が確立されている間はSSHで安全に接続されます(もちろん、メールクライアントはローカルホストの11110ポートに接続するよう設定すること)。これで、SSHで確立した安全な接続の下で、メールを取り寄せることができます。この方法は、メールクライアント以外にもIRCクライアントなどでも活用できます(要はIRC用のポートに転送するようにすれば良いわけです)。

1000秒以内にメールクライアントで接続を確立しないといけないというのは面倒ですし、あまり良い方法ではないと思われます。実はfetchmailというメールを取り寄せるツールを使えば、この問題は回避できます。この方法の詳細は「Secure POP via SSH mini-HOWTO」を参照ください。

scpの使い方

scpはネットワークを介してファイルを安全にコピーするツールです。データ転送にはsshを使うので認証が必要ですが、sshと同等の安全性が提供されます。

基本的な書式は以下の通りです。ローカルPCのファイル(file.txt)をリモートサーバ(example.com)の所定のディレクトリ(/home/user/)にコピーするときの書式です。

$ scp file.txt user@example.com:/home/user/

指定できるオプションをいくつか紹介します。

-1
プロトコル1でSSH接続する。
-2
プロトコル2でSSH接続する。
-4
IPv4のアドレスだけを使うように強制する。
-6
IPv76のアドレスだけを使うように強制する。
-C
圧縮して転送する。このオプションは大文字のO(オー)であることに注意!
-F ssh_config
SSHのためのユーザ毎の設定ファイルを指定する。
-i identity_file
RSA認証で読み込まれるidentity(private key)の書かれたファイルを指定する。
-P port
SSH接続するリモートホストのポートを指定する。大文字のP(ピー)である!
-r
指定したディレクトリ以下を再帰的にコピーする。
-v
詳細な情報を表示するモード。

sftpの使い方

sftpはsshを使って安全にファイル転送を行うツールです。

基本的な書式は次の通りです。リモートサーバ(example.com)のログインアカウント(user)に接続する場合です。

$ sftp user@example.com
sftp>

リモートサーバに接続できたら上のようにsftp>というプロンプトが表示されます。

ファイルxxx.txtをダウンロードする。

$ get  xxx.txt

ファイルyyy.txtをアップロードする。

$ put yyy.txt

ファイル転送をするときにいつも困るのが、ファイル名をTAB補完できないことです。解決策をご存知の方は教えてください。

ヘルプを表示する。

$ help

cd, ls, mkdirなどはリモートPCにおける操作を意味する。 一方、lcd, lls, lmkdirなどはローカルPCにおける操作を意味する。

参考になるサイト

TCP/IPアレルギー撲滅ドリル【番外編】 第9回:scpとsftpの違いについて分かりやすく書かれている。

0 コメント:

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。