1.2. sshの操作方法/using ssh

1.2.1. 接続の準備/preparation for connecting

1.2.1.1. 鍵ペアの生成/generating a key-pair

ssh (secure shell) でリモートマシンにログインするためには、自分が正当な ユーザであることを証明するための認証を受ける必要があります。認証の方法には、 ユーザ名とパスワードによる方式と、公開鍵暗号による方式があります。 本学のスパコンにおいては、セキュリティ強化のため、パスワードによる認証方式は 止められており、公開鍵暗号による認証を用いる必要があります。

そのためには、自分用に、秘密鍵と公開鍵の 鍵ペア を生成して、 公開鍵の方を事前にサーバに登録することが必要になります。

To log in to a remote machine using ssh (secure shell), you must be authenticated, which is proving to the system that you are a legitimate user. There are several authentication methods, including username/password pairs, and public key cryptography based authentication. For the supercomputer of the IT center of this university, to increase security, password based authentication is disabled, and only public key cryptography based authentication must be used.

To do so, you must generate a key pair, which consists of a public key and a private key, and register the public key to the server before logging in.

鍵ペア 生成コマンド ssh-keygen は、乱数によって秘密鍵と公開鍵の ペアを生成します。

鍵ペアが使う暗号アルゴリズムが選べますが、通常は rsa を使います。

鍵ペアの格納先ファイル名は、デフォルトで、 ホームディレクトリ の下の .ssh/id_rsa になります。デフォルトのままでよいので、ファィル名を求められたら 空でリターンすればよいです。

秘密鍵を保存するための暗号鍵として使われる「パスフレーズ」を求められます。 パスフレーズを設定しておけば、万一秘密鍵ファイルを盗まれた場合でも、 パスフレーズさえ相手にわからなければ、侵入に使われる恐れがありません。 大学のルールにより、設定が義務付けられているので、必ず設定して下さい。 このパスフレーズは、鍵ペアを使ってサーバに接続する度に入力が必要となるので、 無くさないように(忘れないように)注意してください。:

The ssh-keygen command will generate a key pair, using a random number generator.

A cryptographic algorithm can be chosen for the key pair. Specify rsa unless you are instructed otherwise.

When the command asks for a file name to store the keys, just enter return to use the default values. The keys will be stored under a directory named “.ssh” under your home directory.

The command will ask for a “pass phrase”, which will be used as an encryption key to store the private key. In case your private key file has been stolen by an attacker, the pass phrase will avoid the attacker from using your private key for intrusion to the server. Usage of the pass phrase is mandated by university rules, so make sure to specify one.

This pass phrase must be typed every time you login using the private key, so be carefull not to lose it:

% ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/takahashi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/takahashi/.ssh/id_rsa.
Your public key has been saved in /home/takahashi/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GMQR8pw84moWMLBC9oAsj/MImi7cKM8I3DnI3vJ4yag takahashi@my-pc
The key's randomart image is:
+---[RSA 2048]----+
|++  ..+o         |
|*oo  *..         |
|*o .. B          |
|=o.. . +         |
|o=. . . S        |
|* +o.            |
|++O+.            |
|=@o=.            |
|E+*o             |
+----[SHA256]-----+

1.2.1.2. ログイン先への公開鍵の登録/registering the public key to the login destination

公開鍵ファイル id_rsa.pub は、ログインしようとする相手マシンのホームディレクトリの .ssh/authorized_keys ファイルに追加される必要があります。

Before using the key pair to log in to a remote server, your public key file id_rsa.pub must be added to a file “.ssh/authorized_keys” under your home directory of that remote server.

id_rsa.pubは次のような形式をしています:

The id_rsa.pub file looks like this:

ssh-rsa AAAAB3NzaC1yc2EAAQABAAABAQCxd0M7fhBVU5F1ug5BazvgMsID8AwKx4as
FxLN+/18Rrg4QUoRhTAe/8thy0pXH4Z0hDA0wsKjb/EtpMekj2a9+SJ/57jq1xKSvF1Y
TXs5bzkPxN8ab0isy60ik3G6sAejDV8HaDCU4gZroRSKOuiaRSdGYP7ykEW/N1CGjluC
QB/DugCZtHi5C7x46TDr/c31X4yDuih+xGhX9IZYlPU0lUMOaCdkYAqAf72YEVn7djsY
tQQWggaZtSNUjOv64i3ir/7sSPCLelyd5SyNCnBNbCTyyYUcHcrSpezSLwZQpF3+4GOO
5DjQM7aGt0VnSESLVwDp5NsdJL takahashi@desktop-pc

ログイン先マシンのauthorized_keysファイルには、id_rsa.pubファイルをその まま貼り付けます。複数のPCから同じサーバにログインしたい場合には、自分が 使う複数のPCのそれぞれで鍵ペアを作成し、それぞれの公開鍵をauthorized_keys ファイルに併記します。

On the authorized_keys file of the remote server machine, the id_rsa.pub file of the local machine should be copied verbatim. If you want to connect to that machine from several different PCs, generate a key pair on each of those PCs, and list all the public keys on the authorized_keys file.

そのためには、相手マシンにファイルを格納できる必要があります。 パスワードによるログインなど、鍵ペア以外によるログイン手段がある場合には自分で ログインしてファイルを置けばよいですが、そうでない場合には、 システム管理者が用意する手段によって公開鍵ファイルを登録します。

To do this, you will need to write to a file on the remote machine you are trying to log in to. If password login is enabled, you can login by yourself using username and password, and access the file by yourself. Otherwise the system administrator usually provides some means to store the id_rsa.pub file.

情報基盤センターのスパコンの場合には、webのインタフェースから公開鍵を登録できる ようになっています。

For the case of the supercomputer of the IT center, a web interface is provided where you can register your public key file.

1.2.1.3. 複数のPCから単一のサーバにアクセスする/Accessing one server from multiple PCs

例えば計算機センターのスパコンに、演習室のパソコンからも、個人のパソコンからも 接続したい場合には、次のようにします。

  • それぞれのPCで鍵ペアを作成する
  • 接続先のスパコンに、各PCの公開鍵を登録する。

1.2.1.4. 単一のPCから複数のサーバにアクセスする/Accessing multiple servers from one PC

単一のPCから、センターのスパコンや研究室の計算機クラスターに接続して作業 したいような場合には、PC上で一度だけ鍵ペアを作成し、同じ公開鍵を複数の サーバに登録します。

1.2.2. リモートマシンへの接続/Connecting to a remote machine

1.2.2.1. リモートサーバにログインする/log in to a remote server

リモートサーバには、以下のようにしてログインできます。:

To log in to a remote server:

% ssh username@servername.schoolname.ac.jp

初めてアクセスするリモートサーバである場合には、サーバとの通信の 暗号化に使用するサーバの公開鍵を凝縮したデータである fingerprint 情報が表示されます。これは、偽のサーバにアクセスさせられていないか 確認するためです。サーバの運用者から提供されている正規のfingerprint と一致するか確認してから接続します。:

When you access to a remote server for the first time, a “fingerprint” data will be shown. The fingerprint is a shortened form of the remote server’s public key that will be used for encryption of the communication to that server. This is shown to make sure that you are not communicating with a fake server that is run by an attacker. You should confirm that the fingerprint matches the fingerprint that is published by some form by the administrator of the server:

% ssh username@servername.schoolname.ac.jp
The authenticity of host 'servername.schoolname.ac.jp (112.xxx.yyy.zzz)' can't be established.
ECDSA key fingerprint is SHA256:SDvbenOEJKHM8AtIvI4VlmpZgKllv0+imNmX2YM5I5g.
Are you sure you want to continue connecting (yes/no)?

確認が済んだfingerprintは、ローカルマシンのホームディレクトリの .ssh/known_hosts ファイルに記録されるので、確認が必要なのは初回 だけです。

Fingerprints that have been confirmed will be recorded to the .ssh/known_hosts file under your home directory at your local PC, so such confirmation happens for the first time only.

1.2.2.2. ログイン時のタイプ量を削減する/reduce key-strokes needed for log in

ログイン先サーバのホスト名やユーザIDをファイルで定義しておくと、 ログイン操作において入力が必要な文字数を削減できます。

You can define the host name and the user name to use for a remote server in a file, then you don’t have to type them when logging in.

例えば jupiter.cc.u-tokyo.ac.jp というサーバに対して jupiterという 短縮名を使いたいとします。jupiterにおける自分のユーザ名は “t12345” だったとします。その場合には、ローカルマシンのホームディレクトリの 下の .ssh/config ファイルに次のように書きます:

Say you want to give a shortcut name “jupiter” for a server with the host name “jupiter.cc.u-tokyo.ac.jp”, and your user name on that machine was “t12345”. In such case, define as follows in the file .ssh/config under your home directory:

Host jupiter
HostName jupiter.cc.u-tokyo.ac.jp
User t12345

このように書いておけば、以後は次のように書くだけでログインできます:

With the above setting, you will be able to log in by typing:

% ssh jupiter

1.2.3. scpを使ってファイルを転送する/transfer files using scp

sshで接続できる設定がしてあれば、sshの関連コマンドである scp (secure copy) コマンドを使って、ファイルの転送ができます。 ファイルをローカルからリモートへ、またはリモートからローカルへ 送ることができます:

If ssh has been configured, a related command “scp” (secure copy) can be used to transfer files. Files can be transferred between the local machine and remote machine in either direction:

% scp test_file.txt jupiter:test_file.txt
% scp test_file.txt jupiter:
% scp jupiter:test_file.txt .

ひとつ注意すべき点は、sshコマンドを実行する場所です。 sshコマンドの通信の仕組みの上に成立しているので、コマンドは必ず、 ローカルマシン側で入力する必要があります。 リモートのサーバからファイルをローカルに送りたい場合であっても、 リモートサーバ上でコマンドを入力することはできません。

Be careful to issue the scp command on the right place. Since scp relies on the communication channel of ssh, the scp command can only be issued on the local machine. Even when you want to send a file from the remote machine to the local machine, you cannot issue the scp command on the remote machine.