- 1. 最初に
- 2. とりあえず接続してみる
- 2.1 SSHサーバの準備
- 2.2 SSHクライアントからの接続
- 2.3 rsh, rcp の代理コマンド
- 3. パスワードの入力回数を減らす
- 3.1 認証方式の変更
- 3.2 公開鍵と秘密鍵を作成する
- 3.3 公開鍵をログイン先に登録する
- 3.4 RSA認証の動作を確認する
- 3.5 ssh-agent(認証代理機能)を使ってみる
- 4. ssh-agent の使い方
- 5. 他のソフトウェアとの組み合せ方
- 5.1 X11(X-Window) との組み合せ方
- 5.2 CVS との組み合せ方
- 5.3 rsync との組み合せ方
- Appendix
本編は、OpenSSH(SSH) の使い方について記載したものです。 SSH の特徴とも言うべき暗号化だのセキュリティだのといった話は、出てきませんので御承知おき願います。 コンピュータ環境については、MacOSX の使用を前提にした内容になっていますが、OpenSSH のコマンドそのものに関する情報は、他の OS でもそのまま役に立つと思います。
私見を述べさせて頂くと、SSH は rsh, rlogin, rcp といった旧来の方式と比べて、意外と楽です。 現状では、まだ面倒な点も多く残されていますが、それでも X11 や CVS の認証方式やファイアウォールの設定を集約できることや、ユーザ権限による設定だけで済む場合が多いことも、大きく影響していると感じています。
ネットワーク(TCP/IP)接続されている二台のコンピュータを用意します。 どちらのコンピュータにも、自分が使えるアカウントを用意して下さい。 本編では、どのコンピュータでもユーザ名が同じになるように統一していますが、ユーザ名やパスワードは一致していなくても大丈夫です。
[システム環境設定]を起動した後、[共有]-[サービス]のダイアログ画面で、[リモートログイン]をチェックします。
ファイアウォールを有効にしている場合は、これに連動して自動的に 22番ポートが許可されます。

上記の操作により、sshd プロセス(デーモン/サービス)が起動します(もしくは、起動することを許可します)。 確認する場合は、Terminal から以下のようにコマンドを打ち込みます。
# MacOSX 10.2 の場合 (sshd の常駐) [G4Cube:~] terra# ps -ax | grep sshd ¶ 492 ?? Ss 0:06.92 /usr/sbin/sshd # sshd プロセスが起動している 499 std UV+ 0:00.00 grep sshd
# MacOSX 10.3 の場合 (接続要求時に xinetd から起動)
[G4Cube:~] terra# head -4 /etc/xinetd.d/ssh ¶
service ssh
{
disable = no # sshd の起動を許可している
socket_type = stream
rlogin や telnet コマンドの代りに、OpenSSHのコマンドを使い SSHサーバに接続します。 SSHクライアントとなるコンピュータの Terminal から以下のようにコマンドを打ち込んでください。
[LetsNote:~] terra% ssh terra@g4cube ¶
# (1) (2)
# (1): サーバ上でのユーザ名.クライアントとサーバで同じユーザ名なら省略可.
# (2): サーバのホスト名(またはIPアドレス).
指定したサーバと初めて接続する場合は、以下のような操作になります。
# 一回目の接続 [LetsNote:~] terra% ssh terra@g4cube ¶ The authenticity of host 'g4cube (192.168.xx.xx)' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? yes ¶ Warning: Permanently added 'localhost' (RSA) to the list of known hosts. terra@g4cube's password: PASSWORD_ON_G4Cube ¶ # SSHサーバ上でのパスワードを入力ちなみに、一回接続に成功すると ~/.ssh/known_hosts というファイルにSSHサーバが記録されるので、二回目以降ではパスワードの入力だけになります。
# 二回目以降の接続 [LetsNote:~] terra% ssh terra@g4cube ¶ terra@g4cube's password: PASSWORD_ON_G4Cube ¶
SSHサーバ側のアカウントにログインできることを確認したら、ここでの作業は終了です。
Welcome to Darwin! [G4Cube:~] terra% exit ¶ # 終了&切断 logout Connection to g4cube closed. [LetsNote:~] terra%
rsh や rcp 等のコマンドも OpenSSH に含まれるコマンドに置き換えることが可能です。
# rsh の代り.SSHサーバ内の Documents ディレクトリを表示させる. [LetsNote:~] terra% ssh terra@g4cube ls -l ~/Documents ¶ terra@g4cube's password: PASSWORD_ON_G4Cube ¶ total 16544 drwxr-xr-x 3 terra staff 102 Dec 5 2002 Acrobat User Data -rw-r--r-- 1 terra staff 13083 Apr 21 2001 AppleCare Tech Info Library -Ma -rw-r--r-- 1 terra staff 5437 Apr 21 2001 AppleCare Tech Info.html -rw-r--r-- 1 terra staff 229 Aug 2 2003 sample.txt ・・・
# rcp の代り.SSHサーバ内のファイルをSSHクライアントにコピーする. [LetsNote:~] terra% scp -p terra@g4cube:Documents/sample.txt text/sample.txt ¶ terra@g4cube's password: PASSWORD_ON_G4Cube ¶ sample.txt 100% |*********************************| 229 00:00
OpenSSH のコマンドを何度も繰り返して使う場合、その度に同じパスワードを入力するのは手間です。 そこで、OpenSSH が備える認証代理機能(ssh-agent)を利用して、このような手間を(なるべく)省くことにします。
OpenSSH には4種類の認証方式がありますが、2章で紹介したのは「パスワード認証」と呼ばれる認証方式です。 まずは、この認証方式を「RSA認証」に切り替えることで、認証代理機能を利用するための条件を整えます。 認証方式の切り替え作業は次節以降のようになります。
自分のアカウント専用の秘密鍵と公開鍵を作成します。 この作業は必ず、SSHクライアントとなるコンピュータにログインしている状態で行います。 鍵の作成時には「パスフレーズ」というパスワードのような単語の入力を求められますので、 何か適当なパスフレーズを決めて入力してください。
[PowerBookG4:~] terra% ssh-keygen -t rsa ¶ Generating public/private rsa key pair. Enter file in which to save the key (/Users/terra/.ssh/id_rsa): Enter passphrase (empty for no passphrase): PASSPHRASE ¶ # パスフレーズを入力 Enter same passphrase again: PASSPHRASE ¶ # もう一度、同じパスフレーズを入力 Your identification has been saved in /Users/terra/.ssh/id_rsa. Your public key has been saved in /Users/terra/.ssh/id_rsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx terra@ PowerBookG4.local.
ちなみに、上記の操作で何が作成されているのか確認すると、以下のようになります。
[PowerBookG4:~] terra% ls -l ~/.ssh ¶ total 16 -rw------- 1 terra staff 951 Aug 2 16:27 id_rsa # 作成された秘密鍵ファイル -rw-r--r-- 1 terra staff 229 Aug 2 16:27 id_rsa.pub # 作成された公開鍵ファイル -rw-r--r-- 1 terra staff 226 Aug 2 15:41 known_hosts [PowerBookG4:~] terra% cat ~/.ssh/id_rsa.pub ¶ # 公開鍵ファイルの中身を表示してみる ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAt6cDaq8zEF33BTEbDNmBjZRHbWiZe0DPcL2/I8KcY/UEx8/4 2Lp5mQF6OAAhvjCANF5TXoIaJSBgSIBpGhTXQ+kmiaJTz3fuIo38vVplHL9K7ghuSk/nLL8qguTbcVvzh+Hf Ea+aG6YkjLNNdI2ftw+kbCkjau7s3nlyDYAynvE= terra@PowerBookG4.local.
SSHクライアントとなるコンピュータ上で作成した公開鍵ファイル(~/.ssh/id_rsa.pub)の内容を、SSHサーバとなるコンピュータ上の ~/.ssh/authorized_keys というファイルに追加します。
# 同名のファイルを上書きしないように別名をつけて、公開鍵をSSHサーバにコピーしておく. [PowerBookG4:~] terra% scp -p ~/.ssh/id_rsa.pub terra@g4cube:PBG4-terra.pub ¶ terra@g4cube's password: PASSWORD_ON_G4Cube ¶ id_rsa.pub 100% |*********************************| 229 00:00 # SSHサーバにログインして作業を継続する. [PowerBookG4:~] terra% ssh terra@g4cube ¶ terra@g4cube's password: PASSWORD_ON_G4Cube ¶ Last login: Wed Aug 2 15:49:59 2003 from letsnote Welcome to Darwin! ## ~/.ssh ディレクトリが存在しない場合は、作成してから以下の作業を行う. [G4Cube:~] terra% cat PBG4-terra.pub >> ~/.ssh/authorized_keys ¶ [G4Cube:~] terra% rm PBG4-terra.pub ¶ # 不要になった公開鍵ファイルを削除
ログイン先のアカウントで OpenSSHを利用したことが無い場合、~/.ssh ディレクトリは存在していません。 以下のようにしてディレクトリを作成してください。
# その1:OpenSSHのコマンドを利用して作成する [G4Cube:~] terra% ssh localhost echo OK ¶ # echo でなくても適当なコマンドで可 The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? yes ¶ Warning: Permanently added 'localhost' (RSA) to the list of known hosts. terra@localhost's password: PASSWORD_ON_G4Cube ¶ OK
# その2:手作業で作成する [G4Cube:~] terra% mkdir ~/.ssh ¶ [G4Cube:~] terra% chmod go-rwx ~/.ssh ¶ [G4Cube:~] terra% ls -ld ~/.ssh ¶ # ~/.ssh ディレクトリのパーミッションを確認する drwx------ 6 terra staff 204 Aug 2 16:33 /Users/terra/.ssh
SSHサーバに公開鍵を登録したら、RSA認証方式が有効になっているか確認します。 SSHクライアントとなるコンピュータからログインを試みてください。 パスワードの代りにパスフレーズの入力を要求されれば正常です。
[PowerBookG4:~] terra% ssh terra@g4cube ¶ Enter passphrase for key '/Users/terra/.ssh/id_rsa': PASSPHRASE ¶ # パスフレーズを入力
RSA認証方式が有効になっても、単にパスワードがパスフレーズに代るだけで、毎回何かを打ち込む手間は似たようなものです。 パスフレーズの入力を一回で済ませるには、以下のようにします。
[PowerBookG4:~] terra% ssh-agent tcsh ¶ # もう一つシェルを起動する.tcsh 以外でも可. [PowerBookG4:~] terra% ssh-add ¶ # RSA認証に使うIDを有効化(追加)する Enter passphrase for /Users/terra/.ssh/id_rsa: PASSPHRASE ¶ Identity added: /Users/terra/.ssh/id_rsa (/Users/terra/.ssh/id_rsa)これ以降、ssh や scp 等のコマンドを実行してもパスワードやパスフレーズは要求されなくなります。
ssh-agentを終了させるには、ssh-agent から起動したシェル(プログラム)を終了させます。
[PowerBookG4:~] terra% exit ¶ # 呼び出し元のシェルに戻る [PowerBookG4:~] terra%
この方法で注意点することは、認証代理機能が有効な範囲は ssh-agent が起動した子プロセス(子孫プロセス)に限定されているということです。 つまり、別の仮想端末(Terminalのウィンドウ)を開いたら、そこでは依然パスフレーズの入力を要求されることになります。
3.5節で紹介した ssh-agent の使い方は、SSH を常用する人や、複数の仮想端末で作業をする人、GUIのアプリケーションから利用する人には、あまり適当な使い方とは言えません。 仮想端末ごとに 3.5節の操作を何度も行うのは不便ですし、GUIのアプリケーションの場合は起動の仕方から工夫しなければなりません。 本章では、このような問題を回避するための方法を紹介します。
ssh-agent の子プロセス(子孫プロセス)とならないシェルに対して認証代理機能を有効にする場合は、 以下のようにして ssh-agent を起動します(常駐させます)。
[PowerBookG4:~] terra% eval `ssh-agent` ¶ Agent pid 1399 [PowerBookG4:~] terra% ssh-add ¶ # ここの手順は 3.5節と同じ Enter passphrase for /Users/terra/.ssh/id_rsa: PASSPHRASE ¶ Identity added: /Users/terra/.ssh/id_rsa (/Users/terra/.ssh/id_rsa)ssh-agent を終了させる時は、以下のコマンドを打ち込みます。
[PowerBookG4:~] terra% eval `ssh-agent -k` ¶ Agent pid 1399 killed;
3.5節の方法と違い、この方法を使うとログイン・シェルを終了しても ssh-agent プロセスは残留してしまいます。 ログアウトする前には、必ず ssh-agent を終了させるコマンドを打ち込んでください。 とは言え、うっかり忘れてしまうのが人間の常ですから、この方法を使う時は ~/.logout ファイルに以下のような記述を加えておきます。
# csh, tcsh 用のスクリプト
if ($?SSH_AGENT_PID) then
eval `ssh-agent -k`
endif
4.1節で説明した eval `ssh-agent` というコマンドで、ssh-agent がシェルにどのようなスクリプトを実行させたのか、確認してみます。
# 起動:`ssh-agent` によるスクリプトの実行/記録/表示 [PowerBookG4:~] terra% eval `ssh-agent | tee xxxx.csh` ¶ # ファイル名は任意 Agent pid 1401 [PowerBookG4:~] terra% cat xxxx.csh ¶ # スクリプトを表示する setenv SSH_AUTH_SOCK /tmp/ssh-6igaBIMu/agent.1401; setenv SSH_AGENT_PID 1401; echo Agent pid 1401;
このスクリプトでは、2つの環境変数 SSH_AUTH_SOCK と SSH_AGENT_PID に値を設定しています。 SSH_AUTH_SOCK の値は、起動した ssh-agent プロセスと通信するためのソケット・リンクを、 SSH_AGENT_PID の値は、起動した ssh-agent プロセスの PID を示しています。
[PowerBookG4:~] terra% ls -l ${SSH_AUTH_SOCK} ¶
srwxr-xr-x 1 terra wheel 0 Aug 2 21:54 /tmp/ssh-6igaBIMu/agent.1401
[PowerBookG4:~] terra% ps ${SSH_AGENT_PID} ¶
PID TT STAT TIME COMMAND
1401 ?? Ss 0:00.00 ssh-agent
つまり、シェルから起動した子プロセス(ssh-add, ssh, slogin, scp等)は、環境変数 SSH_AUTH_SOCK が示すソケットを経由して ssh-agent プロセスと通信し、認証済み(パスフレーズが入力済み)であることを通知したり、逆に認証済みであることを確認したりしているという訳です。
ここまでくれば、`ssh-agent -k` が何をしているかは言わずもがなだと思います。(以降の説明は省略)
3.5節で、認証代理機能が子プロセス(子孫プロセス)に限定されていると説明しましたが、これは環境変数が親プロセスから子プロセスへ引き継がれるという OSの仕組みに起因しているからに他なりません。
つまり、環境変数さえ巧く設定してしまえば、親子関係にないプロセス同士でも、一つの ssh-agent を共用することが可能ということです。 実際に確認した時の様子を以下に示します。
# STEP1: 仮想端末1 [PowerBookG4:~] terra% ssh-agent > xxxx.csh ¶ # ファイル名は任意 [PowerBookG4:~] terra% eval `cat xxxx.csh` ¶ # 環境変数 SSH_AUTH_SOCK 等を設定する Agent pid 1401
# STEP2: 仮想端末2 [PowerBookG4:~] terra% eval `cat xxxx.csh` ¶ # 環境変数 SSH_AUTH_SOCK 等を設定する Agent pid 1401
# STEP3: 仮想端末1 [PowerBookG4:~] terra% ssh-add ¶ Enter passphrase for /Users/terra/.ssh/id_rsa: PASSPHRASE ¶ Identity added: /Users/terra/.ssh/id_rsa (/Users/terra/.ssh/id_rsa)
# STEP4: 仮想端末2
[PowerBookG4:~] terra% ssh terra@g4cube 'echo ${HOST}' ¶ # 認証代理機能の有効を確認
G4Cube.local. # パスフレーズを要求されることなく、SSHサーバのホスト名を表示
# STEP5: 仮想端末1 [PowerBookG4:~] terra% eval `ssh-agent -k` ¶ # ssh-agent を終了させる Agent pid 1401
# STEP6: 仮想端末2
[PowerBookG4:~] terra% ssh terra@g4cube echo ${HOST} ¶ # 認証代理機能の無効を確認
Enter passphrase for key '/Users/terra/.ssh/id_rsa': PASSPHRASE ¶
G4Cube.local.
[PowerBookG4:~] terra% ssh-add ¶ # ssh-agent プロセスは既に存在していない
Could not open a connection to your authentication agent.
閑話休題。実用的な話に戻ります。screen というのは、仮想端末アプリケーションの1つのウィンドウを、複数の仮想端末にするためのプログラムです。 『複数』といっても、画面上は1つのウィンドウしか無いので、表示を切り替えながら使うことになりますし、 認証代理機能の有効範囲も1つのウィンドウ内に限定されるという条件付きです。
screen は MacOSX にもインストールされているので、興味のある方は実際に使ってみてください。
# その1:素の状態なら [PowerBookG4:~] terra% ssh-agent screen ¶
# その2:4.1節等の手順で、認証代理機能を有効にした後なら [PowerBookG4:~] terra% screen ¶
ssh-Terminal というのは、ssh-agent の子プロセスとして Terminal を起動させるプログラムです。 私が勝手に作成・命名したプログラムですので、ご存じなくても恥じることはありません(笑)。
この方法で起動した Terminal では、全ての全仮想端末ウインドウが認証代理機能の有効範囲になります。 あるウィンドウの仮想端末で ssh-add コマンドを一回実行すれば、他のウィンドウの仮想端末でも認証代理機能が有効になります。 興味のある方は、ダウンロードして利用してみてください。
ssh-Terminal ("ssh-Terminal-1.0.tgz", 8KB)
ちなみに、この方法をアプリケーションの形態で紹介したのは、これまでのように Terminal から起動すると面倒な状態になるからです。 試しに、認証代理機能が効いていない素の Terminal から、以下のコマンドを実行してみてください。
nohup ssh-agent /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal &Terminal がもう一つ起動して、ドックにアイコンが二つ表示されたはずです。 最初の Terminal のアイコンやウィンドウと紛らわしくて操作を間違えそうです。 最初の Terminal は終了させてしまうというのも一つの解決策ですが、あまりスマートな方法とは思えません。
~/.MacOSX/environ.plist というのは、Finder や Dock から起動されるアプリケーションに環境変数を設定するための定義ファイルです。 このファイルを利用して、環境変数 SSH_AUTH_SOCK に予め適切なパスを設定しておけば、GUI(Aqua, X11)上で利用する全アプリケーションを認証代理機能の有効範囲にすることが可能です。 つまり、Terminal*1 で ssh-add コマンドを実行すれば、"Project Builder" 等でも SSHの認証代理機能が有効になります。
まず、~/.MacOSX/environ.plist の内容を以下のように設定します。
# ~/.MacOSX/environment.plist の設定
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/...
<plist version="1.0">
<dict>
<key>SSH_AUTH_SOCK</key>
<string>/Users/terra/.MacOSX/ssh_auth_sock</string>
</dict> # 必ずフルパスで記述する.シェルを媒介しないので "~/" は使用不可.
</plist>
設定が完了したら再ログイン(もしくは再起動)します。
次に ssh-agent を起動しますが、この時、環境変数 SSH_AUTH_SOCK の値に合せてソケット・リンクを作成します。
[PowerBookG4:~] terra% eval `ssh-agent -a ${SSH_AUTH_SOCK}` ¶
Agent pid 1399
これ以降の使い方は、4.1節と全く同じです。 仮想端末で ssh-add コマンドを一回実行すれば、全ての GUIアプリケーションで認証代理機能が有効になりますし、 eval `ssh-agent -k` コマンドを実行すれば認証代理機能を終了させることができます。
ssh-agent が常駐(起動)している間は、指定したパスにソケット・リンクが存在しています。 誤って削除しないように、隠しディレクトリ/ファイルにパスを設定しておくことをお奨めします。
[PowerBookG4:~] terra% ls -lF ~/.MacOSX ¶ total 48 -rw-r--r-- 1 terra staff 396 Aug 24 15:02 environment.plist srwxr-xr-x 1 terra staff 27 Aug 24 17:07 ssh_auth_sock=
ここまで読んで、ssh-agent は何て面倒な代物だろうという方や、そこまでしてデスクトップ(端末の操作)のセキュリティを確保する必要は無いという方は、空のパスフレーズを使うことも検討してみてください。 パスフレーズさえ無ければ、ssh-agent は無用の長物なのですから。 ただし、秘密鍵ファイルの内容は暗号化されていないので、悪意のある人にコピーされないように注意しなければなりません。
既に、パスフレーズ付きで秘密鍵/公開鍵のペアを作成している場合は、以下のようにすればパスフレーズを取り除く(秘密鍵ファイルの暗号化を解除する)ことができます。
[PowerBookG4:~] terra% ssh-keygen -p ¶ Enter file in which the key is (/Users/terra/.ssh/id_rsa): ¶ # 秘密鍵のファイル名を確認 Enter old passphrase: OLD_PASSPHRASE ¶ # これまでのパスフレーズを入力する Key has comment '/Users/terra/.ssh/id_rsa' Enter new passphrase (empty for no passphrase): ¶ # 空のパスフレーズを入力する Enter same passphrase again: ¶ # 空のパスフレーズをもう一度入力する Your identification has been saved with the new passphrase.
OpenSSH は X11(X-Window) と組み合わせて使うことも可能です。 MacOSX での設定は、X11 が標準のウィンドウシステムでないため少々設定変更が必要になりますが、 それでも、ファイアウォールの設定変更や xhost 云々の手間を考えれば、SSH による接続の方が楽な気がします。
サーバ側とクライアント側の両方に X11 がインストールされていることが必要なので、 MacOSX(10.2.x以前)のコンピュータでは、X11のパッケージを別途に入手・インストールしておいてください。
MacOSX で 外部の端末に対してX11を使う場合は、 /etc/sshd_config ファイル内の設定を書き換える必要があります。 ファイル内に下記のような記述があるので、
#X11Forwarding no #X11DisplayOffset 10 #X11UseLocalhost yes以下のように書き換えます。(書き換えには管理者権限が必要です。)
X11Forwarding yes X11DisplayOffset 10 # デフォルトと同じなので、コメントのままでもOK X11UseLocalhost yes # デフォルトと同じなので、コメントのままでもOK/etc/sshd_config ファイルを書き換えたら、設定内容を有効にするために sshd を再起動します。 ただし、MacOSX 10.3のように xinetdが sshdを起動する方式の場合、この作業(sshd の再起動)は不要です。
[G4Cube:~] terra% ps -ax | grep sshd ¶ 329 ?? Ss 0:06.92 /usr/sbin/sshd 28988 std UV+ 0:00.00 grep sshd [G4Cube:~] terra% sudo kill -HUP 329 ¶ Password: # パスワードを入力する
SSHサーバに接続する前には、必ず X11(Xサーバ)を起動しておき、かつ環境変数 DISPLAY に適切な値を設定しておく必要があります。 MacOSX の標準設定では、環境変数 DISPLAY を設定してくれないという問題があるので、~/.MacOSX/environment.plist ファイルに環境変数の設定を追加しておきます。
# ~/.MacOSX/environment.plist の内容例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/...
・・・
<key>DISPLAY</key>
<string>localhost:0.0</string>
・・・
SSHサーバに接続するには、以下のようにコマンドを打ち込みます。
[LetsNote:~] terra% ssh -X terra@g4cube ¶ # -X(大文字)オプションを付けて起動 Last login: Sun Aug 24 22:14:05 2003 Welcome to Darwin! [G4Cube:~] terra% xeyes & ¶ # テスト.目玉が表現れたらOK. [1] 454
正常に表示できない場合は、リモートログインした状態で環境変数 DISPLAY の値を確認します。
[G4Cube:~] terra% env | grep DISPLAY¶ DISPLAY=localhost:10.0前述の SSHサーバの設定例であれば、10.0 以上の番号が sshd により設定されているはずです。 0.0 の様な番号が設定されている場合は、SSHサーバ側の .login等のファイルで、環境変数 DISPLAY の値を上書きするようになっている可能性があります。 もしそうであれば、SSHサーバ側も(SSHクライアントと同様) ~/.MacOSX/environment.plist による設定方法に変更するか、 .login等のファイルを以下のように書き換えるなどの工夫をしてください。
if (! $?DISPLAY) then
setenv DISPLAY localhost:0.0
endif
OpenSSH の動作環境が整っていれば、SSHサーバとなるコンピュータでの追加作業は特にありません。 SSHクライアントとなるコンピュータでは、CVSコマンドを使うための環境変数の設定が必要になります。
setenv CVS_RSH ssh
setenv CVSROOT :ext:terra@g4cube:/Users/terra/cvsroot
# (1) (2) (3)
# (1): サーバ上でのユーザ名.リポジトリにアクセス可能なアカウント.
# (2): サーバのホスト名(またはIPアドレス).
# (3): サーバ上でのリポジトリの格納場所.絶対パスのみ記述可.
CVSコマンドでリポジトリを指定する場合は、環境変数 CVSROOT の設定は必要はありません。
また、頻繁に使う環境変数(CVS_RSH等)は、.login ファイルで設定するようにしておくと楽です。
"Project Builder" から CVSサーバにアクセスする時は、4.6節で述べた方法で環境を整えます。 この時、~/.MacOSX/environment.plist に環境変数 CVS_RSH の設定を忘れずに追加しておきます。
# ~/.MacOSX/environment.plist の設定
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/...
・・・
<key>CVS_RSH</key>
<string>ssh</string>
・・・
<key>SSH_AUTH_SOCK</key>
<string>/Users/terra/.MacOSX/ssh_auth_sock</string>
・・・
環境変数を ~/.MacOSX/environment.plist で設定する方法は、Terminal 等も含めた全ての GUIアプリケーションに有効です。 ですから、リモートのコンピュータから SSHでログインして更にリモートの CVSサーバを使うとか、コンソールモードで MacOSX を使うのでなければ、先に述べた .login ファイルによる設定と併用する必要はありません。
OpenSSH の動作環境が整っていれば、SSHサーバとなるコンピュータでの追加作業は特にありません。 SSHクライアントとなるコンピュータでは、rsync コマンドをの実行時に引数として -e オプションで ssh を指定するか、環境変数 RSYNC_RSH の値として ssh を設定しておいてから使います。
# rsync のコマンド使用例(-e オプションを指定する場合) rsync -e ssh --exclude '.*' -avuz REMOTE_SRC LOCAL_DST rsync -e ssh --exclude '.*' -Cavuz LOCAL_SRC REMOTE_DST
編集ツールとして、"/Developer/Applications/Property List Editor" を使います。 保存形式として "XML Property List File" を選択すれば、簡単に雛形を作ることができます。
ただし、このツールは隠しディレクトリにファイルを新規作成することができないので、一旦別のディレクトリに保存しておき、後でシェルを使って ~/.MacOSX ディレクトリにファイルを移動させることになります。 既存のファイルを編集する時は、ファイルオープンのダイアログの [Go to:]欄に ~/.MacOSX と打ち込めば、隠しフォルダのファイルも一覧表示・選択できるので問題ありません。
本節の説明は、4.6節の方法をより便利に使うための方法です。 loginwindow のオプション機能を利用して、ログイン前後に処理を起動します。 関係するファイルが多いこともあり、この節は本当のメモ書き程度の記述になっています。
本節で紹介する方法は、設定に失敗すると Aquaからのログインが二度とできない状態に陥ります。 このメモを見て何をしているのか判らない方は、この方法は使わないようにしてください。 判る方も、失敗した時に回復させるための手段*1を確保してから実行してください。
| ID | ファイルパス | ファイルの 所有者:グループ |
ファイルの 規定者 |
|---|---|---|---|
| (1) | /var/root/Library/Preferences/com.apple.loginwindow.plist | root : wheel | Apple |
| (2) | /Library/loginwindow/ | root : admin | terra |
| (3) | /Library/loginwindow/loginhook | root : admin | terra |
| (4) | /Library/loginwindow/logouthook | root : admin | terra |
| (5) | ~/.MacOSX/ | terra : stuff | Apple |
| (6) | ~/.MacOSX/environment.plist | terra : stuff | Apple |
| (7) | ~/.MacOSX/loginhook | terra : stuff | terra |
| (8) | ~/.MacOSX/logouthook | terra : stuff | terra |
| (9) | ~/.MacOSX/ssh_agent_pid | terra : stuff | terra |
| (10) | ~/.MacOSX/ssh_auth_sock | terra : stuff | terra |
[PowerBookG4:~] terra% sudo defaults write com.apple.loginwindow # 次の行に続く
LoginHook /Library/loginwindow/loginhook ¶
[PowerBookG4:~] terra% sudo defaults write com.apple.loginwindow # 次の行に続く
LogoutHook /Library/loginwindow/logouthook ¶
[PowerBookG4:~] terra% sudo mkdir /Library/loginwindow ¶
#!/bin/sh
USER=$1
HOME=/Users/${USER}
if [ -e ${HOME}/.MacOSX/loginhook ]; then
sudo -u ${USER} ${HOME}/.MacOSX/loginhook
fi
#!/bin/sh
USER=$1
HOME=/Users/${USER}
if [ -e ${HOME}/.MacOSX/logouthook ]; then
sudo -u ${USER} ${HOME}/.MacOSX/logouthook
fi
#!/bin/sh
eval `ssh-agent -s -a ~/.MacOSX/ssh_auth_sock`
echo ${SSH_AGENT_PID} > ~/.MacOSX/ssh_agent_pid
#!/bin/sh export SSH_AGENT_PID=`cat ~/.MacOSX/ssh_agent_pid` eval `ssh-agent -s -k` rm -f ~/.MacOSX/ssh_agent_pid