SSHの使い方
4460 ワード
SSH(Secure Shell)は、リモートログイン、リモート実行コマンド、ポート転送などに使用される、安全でないネットワーク上に安全な伝送チャネルを構築する.telnet、rloginなどの不安全なログインプログラムに代わるように設計されています.
OpenSSHは最もポピュラーなSSHプロトコルの実装プログラムであり、ほとんどのLnuxシステムではデフォルトでインストールされ、Wndows 10ではデフォルトで使用されている.OpenSSHが提供する主なツールはクライアントプログラム:ssh,scp,sftp 鍵生成と管理:ssh-keygen,ssh-keysign,ssh-keysan,ssh-add サーバ側プログラム:sshd,sftp-server,ssh-agent 以前のバージョンのWndowsシステムでは、一般的にPuTTYをSSHのクライアントプログラムとして、WinSCPをリモートファイル交換プログラムとして使用していました.以下、OpenSSHのツールを用いて説明する.
サーバ側sshd
SSHはサーバ/クライアントアーキテクチャを使用し、リモートでアクセスされる機器はサーバ側プログラム
Arch LinuxがOpenSSHをインストールしてsshdサービスを起動する指令は以下の通りである.
再起動後にsshdサービスを自動的に実行する場合は、次のコマンドを使用します.
リモートログイン/リモート実行命令
サーバSが
ここで、
リモート端末を取得するのではなく、サーバ上で1つのコマンドを実行する必要がある場合は、次のコマンドを使用します.
ここで、
パスワードなしでログイン
上記のリモートログイン/またはリモート実行命令操作を実行すると、対応するユーザー名のパスワードを入力するように毎回注意されます.インタラクティブな操作であれば、パスワード入力はキーボードを数回叩くだけの面倒です.ただし、スクリプトを作成して自動化する操作であれば、パスワード入力は適切ではありません.
SSHは、公開鍵を使用してパスワードなしのログインを許可する.具体的には、ローカルデバイス上で秘密鍵/公開鍵ペアを生成し、公開鍵をリモートサーバにコピーすることで、この公開鍵暗号化通信チャネルを利用して、パスワードレスログインサーバを実現することができる. を生成する.は、 に公開鍵をコピーする.
このコマンドを実行すると、リモートサーバに入力するログインパスワードが表示されます.公開鍵のコピーが完了したら、後でサーバにログインすればパスワードなしでログインできます.手動コピー公開鍵(
ポート転送
ローカルデバイスのIPアドレスをlocal_とするipは、
ローカルデバイスのIPアドレスをlocal_とするipは、
逆SSHトンネル に入る を実行しない
autossh
ネットワーク接続が不安定なため、トンネルが中断します.この場合、
リファレンス OpenSSH Wikipedia-Secure Shell StackExchange-Reverse SSH Tunneling
OpenSSHは最もポピュラーなSSHプロトコルの実装プログラムであり、ほとんどのLnuxシステムではデフォルトでインストールされ、Wndows 10ではデフォルトで使用されている.OpenSSHが提供する主なツールは
サーバ側sshd
SSHはサーバ/クライアントアーキテクチャを使用し、リモートでアクセスされる機器はサーバ側プログラム
sshd
を実行する必要がある.sshd
は、デフォルトではポート22を開いています.Arch LinuxがOpenSSHをインストールしてsshdサービスを起動する指令は以下の通りである.
$ pacman -S openssh
$ systemctl start sshd
再起動後にsshdサービスを自動的に実行する場合は、次のコマンドを使用します.
$ systemctl enable sshd
sshd
のプロファイルは、一般に/etc/ssh/sshd_config
にあり、rootログインを許可するかどうか、他のポートを使用するかどうかなど、SSHサーバ側の操作を構成するために使用されます.リモートログイン/リモート実行命令
サーバSが
sshd
サービスを有効にしている場合、以下のコマンドを使用して、ローカルデバイスLからサーバSにログインする.$ ssh user@remote_ip
ここで、
user
はサーバS上のユーザ名であり、remote_ip
はサーバSのIPアドレスである.サーバが標準のSSHポート22を使用せずにカスタムポートを構成している場合は、リモートログイン時に-p
を使用してポート番号を指定する必要があります.$ ssh -p port user@remote_ip
リモート端末を取得するのではなく、サーバ上で1つのコマンドを実行する必要がある場合は、次のコマンドを使用します.
$ ssh user@remote_ip command
ここで、
command
は実行する必要がある命令であり、例えばssh user@remote_ip ls /tmp/
はリモートサーバ上の/tmp/
フォルダの内容をリストする.scp
ローカルデバイスとサーバ間の暗号化されたファイルコピーを実現します.具体的な使い方は後述しません.パスワードなしでログイン
上記のリモートログイン/またはリモート実行命令操作を実行すると、対応するユーザー名のパスワードを入力するように毎回注意されます.インタラクティブな操作であれば、パスワード入力はキーボードを数回叩くだけの面倒です.ただし、スクリプトを作成して自動化する操作であれば、パスワード入力は適切ではありません.
SSHは、公開鍵を使用してパスワードなしのログインを許可する.具体的には、ローカルデバイス上で秘密鍵/公開鍵ペアを生成し、公開鍵をリモートサーバにコピーすることで、この公開鍵暗号化通信チャネルを利用して、パスワードレスログインサーバを実現することができる.
ssh-keygen
を用いる鍵$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/local_user/.ssh/id_rsa): #
Enter passphrase (empty for no passphrase): # ,
Enter same passphrase again: # ,
Your identification has been saved in /home/local_user/.ssh/id_rsa.
Your public key has been saved in /home/local_user/.ssh/id_rsa.pub.
ssh-keygen
は、まず、記憶鍵のファイル名の入力を要求し、デフォルトは/home/user/.ssh/id_rsa
であり、その後、鍵を使用するパスワードの入力を要求する.この鍵を使用するパスワードは、ログインサーバのパスワードとは異なり、ログインサーバが許可されるかどうかを制御するのではなく、現在の鍵の使用を許可するかどうかを制御します.パスワードなしログインを実現するには、鍵を使用するパスワードを空にする必要があります.つまり、パスワードの入力を促すところで直接押す必要があります.ssh-copy-id
を使用するサーバ$ ssh-copy-id user@remote_ip
このコマンドを実行すると、リモートサーバに入力するログインパスワードが表示されます.公開鍵のコピーが完了したら、後でサーバにログインすればパスワードなしでログインできます.
ssh-copy-id
と同様)手動コピー公開鍵は、ssh-copy-id
の具体的な動作内容である.ローカルデバイス上の/home/local_user/.ssh/id_rsa.pub
ファイルをサーバにコピーし、上記のファイルの内容をサーバ上の/home/server_user/.ssh/authorized_keys
ファイルの末尾にコピーします.ポート転送
-L
$ ssh -L port0:localhost:port1 user@remote_ip
ローカルデバイスのIPアドレスをlocal_とするipは、
local_ip:port1
に送信されたデータをremote_ip:port0
、すなわちlocal_ip:port1 --> remote_ip:port0
に転送する.-R
$ ssh -R port0:localhost:port1 user@remote_ip
ローカルデバイスのIPアドレスをlocal_とするipは、
remote_ip:port1
に送信されたデータがlocal_ip:port0
、すなわちlocal_ip:port1 。
に転送される逆SSHトンネル
$ ssh -f -N -T -R port0:localhost:22 user@remote_ip
-f
:ssh接続許可後バックグラウンド運転-N
:遠隔命令-T
:インタラクティブ端末を作成しないローカルデバイスのIPアドレスをlocalと仮定するip、remote_に接続ip:port 0は、local_ip:22
、すなわちsshポートに接続されている.したがって、ssh -p port0 user@remote_ip
はssh user@local_ip
に相当する.この使い方はremote_ipはパブリックIP、local_ipがイントラネットIPの場合、とても役に立ちます.逆SSHトンネルを使用すると、イントラネットIPアドレスのデバイスがパブリックネットワークに露出し、どのデバイスからもイントラネットデバイスにアクセスできるようになります.autossh
ネットワーク接続が不安定なため、トンネルが中断します.この場合、
autossh
を使用して自動的に再接続することができる.autossh
のパラメータはssh
と同じです.リファレンス