初心者必見 GPU環境構築〜SSH接続〜
- SSH接続
- 1.【クライアント】公開鍵と秘密鍵を作成
- 2. 【クライアント】公開鍵のコピーをサーバー側に送信
- 3.【サーバー】公開鍵をauthorized_keysに追加
- 4.【クライアント】秘密鍵を用いることでサーバーにSSH接続できることを確認
- 5.【サーバー】rootログイン・パスワードログインを禁止する
- 6.【クライアント】SSHログインの簡略化
- 7. SSHファイル転送の簡略化
SSH接続
LinuxのSSH接続を行います. 以下を参考にさせて頂きました.参考:SSHなるものをよくわからずに使っている人のための手引書 - Qiita
そもそもSSH接続が分からんという方は以下を参照してください.
参照:はじめてのssh
SSH接続するために, 秘密鍵と公開鍵を設定します.
流れは以下のように, クライアントで鍵を作成して, サーバーに公開鍵を送信する手順で進めていきます.
また, 以降では, 以下のように定義します.
【クライアント】: クライアント(機能を使う側)の操作
【サーバー】: サーバー(機能を提供する側)の操作
1.【クライアント】公開鍵と秘密鍵を作成
以下のコマンドで, ~/.sshディレクトリが作成され, その中に公開鍵(id_rsa.pub)と秘密鍵(id_rsa)が作成されます.ssh-keygen
※パスフレーズの変更
ssh-keygen -p
2. 【クライアント】公開鍵のコピーをサーバー側に送信
scpコマンドを使いセキュアにファイルをコピーして, サーバーに送信します.ユーザー名はlinuxの〇〇@××:~となっている〇〇のところです.
ipアドレス(xx.xx.xx.xx)はhostname -I | cut -d ' ' -f1で確認できます.
scp ~/.ssh/id_rsa.pub (サーバーのユーザー名)@(サーバーのipアドレス):~
3.【サーバー】公開鍵をauthorized_keysに追加
サーバーに対する操作は直接サーバーのシェルで操作するか, クライアントで以下のコマンドからパスワード認証することで可能になります.1.公開鍵がコピーされていることを確認する
cd ~ && cat id_rsa.pub
2..sshディレクトリを作成
mkdir ~/.ssh
3..sshのパーミッション変更
chmod 700 ~/.ssh
4.~/.ssh/authorized_keysを作成
touch ~/.ssh/authorized_keys
5.~/.ssh/authorized_keysに追加
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
6.authorized_keysのパーミッション変更
chmod 600 authorized_keys
4.【クライアント】秘密鍵を用いることでサーバーにSSH接続できることを確認
以下でログイン可能です.最初のログインはパスワード認証が必要ですが, 一度ログアウトexitして再度ログインする際にパスワード認証されずにログインできれば, 無事終了です!
ssh (サーバーのユーザ名)@(サーバーのipアドレス)
5.【サーバー】rootログイン・パスワードログインを禁止する
セキュリティ上の面からrootログインを禁止しましょう. また, 鍵認証の設定をしてのでパスワードログインも禁止してしまいましょう.Emacsのインストール
その前に今回はEmacsを使って編集するのでEmacsをインストールしましょう. 以下を参照ください.インストール
Ubuntu 18.04 にEmacsをインストール。設定まで - Qiita
使い方
突然だがEmacs を始めよう - Qiita
emacs コマンド一覧(置換・コピー・検索・終了)
もし, Emacsがまだよく分からないという方は, emacs ファイル名をopen ファイル名とすれば, txtファイルで編集できるのでそちらをご利用下さい.
では, 実際に設定を変更していきます.
rootログインして, sshd_configファイルを編集します. PermitRootLoginとPasswordAuthenticationと書いてある行を探してnoと変更してください.
#rootログイン su - emacs /etc/ssh/sshd_config =================================================================== # rootログイン禁止 PermitRootLogin no # パスワードログイン禁止 PasswordAuthentication no
設定を変更したら sshサーバーを再起動します.
/etc/rc.d/init.d/sshd restart
6.【クライアント】SSHログインの簡略化
毎回ログインするたびにssh (サーバのユーザ名)@(ipアドレス)と入力するのはかなり面倒ですよね.そこで~/.ssh/configと.bash_profileで設定することで, 簡単にログインできるようにします!
初めに~/.ssh/configファイルで設定を加えます.
emacs ~/.ssh/config =================================================================== Host * UseKeychain yes AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa #Hostの後にサーバに対して固有な名称をつける(ここではhoge) Host hoge HostName (ipアドレス) User (サーバのユーザ名)
これによりssh hogeのみでサーバにSSH接続できるようになります.
ssh hoge
さらに簡略化してみましょう!
.bash_profileで設定します. 以下のように設定することで, hogeを実行することで, ssh hogeが行われます.
emacs ~/.bash_profile =================================================================== hoge() { ssh hoge }
変更の反映
source .bash_profile
以下のようにhogeだけでSSH接続できるようになりました!
hoge
7. SSHファイル転送の簡略化
.bash_profileでファイル送信・ファイル受信の関数を定義することで簡単にクライアントとサーバーでファイルを転送できるようにします.
emacs ~/.bash_profile =================================================================== hoge() { ssh hoge } USER=(ユーザー名) #idアドレス取得関数 function hostname_of() { host=$1 result=command ssh -G $host | awk "/^hostname / { print $2 }" | cut -c 10- return $result } #ファイル送信 rsyncto hoge 送信場所のパス(クライアント) 受信場所のパス(サーバ) function rsyncto() { host=$(hostname_of $1) localpath=$2 remotepath=$3 echo $USER@$host:$remotepath command rsync -avz $localpath $USER@$host:$remotepath } #ファイル受信 rsyncfrom hoge 送信場所のパス(サーバ) 受信場所のパス(クライアント) rsyncfrom() { host=$(hostname_of $1) remotepath=$2 localpath=$3 command rsync -avz $USER@$host:$remotepath $localpath }
これによって, 例えば以下のように, クライアントの~/hogehogeをhogeサーバーの./に送信することができます!
rsyncto hoge ~/hogehoge ./