UbuntuにSSHサーバーをインストールして、PowerShellでSSH接続, SCPファイル転送の方法をエントリーします。
(注:UbuntuにPowerShellをインストールするエントリーではありません)
目次
- Ubuntu側
- UbuntuにSSHサーバーをインストール
- Windows側
- sshコマンドの確認とOpenSSHのインストール
- ssh接続
- scpでファイル転送
- 接続済みホスト情報のクリア
※ Ubuntu は 18.04 で、実機のIPアドレスは 172.24.0.78 として説明しています。
こちらのHyper-V上に作成したUbuntuになります。
UbuntuにSSHサーバーをインストール
SSHサーバーの確認。sshdサービスのステータスを確認してみます。
sudo service sshd status
sshdがインストールされていなければ次のように Unit sshd.service could not be found. が表示されます。
SSHサーバーとしては、次のコマンドで openssh-server をインストールします。
sudo apt install openssh-server
y を入力
インストール完了。
あらためて sshd サービスを確認
sudo service sshd status
ssh.service というものが起動しているのが判ります。
(CTRL + c で抜ける)
インストール直後なので、念のため sshd をリスタートしておきます。
sudo service sshd restart
UbuntuのSSHサーバーとしての作業はこれで完了です。
SSHサーバーは、デフォルトで TCPポート22で動作しますので、ファイアーウォール等があれば通過できる状態にしておいてください。
ちなみに、ここでは ufw は無効の状態で進めます。
セキュリティを高めるために、ufw有効化やデフォルトのSSHポート番号(22)を変更するなどがありますが、デフォルトのまま進めます。
この後、このUbuntuにSSH接続でログインしますが、ログイン直後の現在位置と配下のファイルが一致していることを確認するために、pwd と ls で、ファイルの状態を見ておきます。
pwd ls
ターミナルを終了し、ログアウトします。
Ubuntu側の設定はこれで完了です。
Ubuntuをシャットダウン、再起動した後もSSHサーバーは起動されます。
今後は、Ubuntu デスクトップとしてログインすることはあまりなくなるはずです。
sshコマンドの確認とOpenSSHのインストール
ここからは、Windows側の操作になります。
PowerShellを起動し、ssh コマンドの確認をしてみます。
これは管理者では無く一般ユーザーでも大丈夫です。
PowerShellは (x86) では無く、通常のほう(64 bit)を使います。また、PowerShell ISE も駄目です。
ssh
もしこのような画面にならず、エラーが表示される場合は ssh が使えない状態なので、OpenSSH クライアントをインストールします。
OpenSSH クライアントのインストールは管理者で行う必要があります。
Windowの設定で「オプション」..を入力し「オプション機能の管理」を選択
「OpenSSH クライアント」があるのでインストールします。画面はインストールされている状態のものです。
私は 明示的にインストールした覚えはありませんがインストールされていました。
Windows Updateは良く行っていますが、最初からインストールされていたのか、Windows Updateでインストールされたのか判りません。
後日、Windows 10、64 bit バージョン1909 の Updated September 2020 を isoからクリーンインストールしたところ、
OpenSSH クライアントは最初からインストールされていました。
Windows Server 2019 バージョン1809 の Updated September 2020 も isoからクリーンインストールしたところ、
OpenSSH クライアントは最初からインストールされていました。
ssh接続
sshコマンドで接続する際には、
ssh [ユーザー名]@[ホスト名 or IPアドレス]
の形式なので、
ssh adminuser@172.24.0.78
で接続します。
初回接続の場合、Ubuntu側のフィンガープリントが表示され、接続して良いか訊かれるので「yes」を入力します。「yes」を入力すると次回以降は訊かれることはありません。このクリアについては後述の接続済みホスト情報のクリアを参照。
その後、ユーザーのパスワードを入力するとUbuntuに入れます。
ログイン直後で、pwd と ls を確認
pwd ls
デスクトップのターミナルで確認したものと同じはずです。
今後、Ubuntuの操作はここから行うようにします。
Windowsメインの人は(ほとんどの人がそうだと思います)、最初はCUI環境が辛いと思いますが、それでも使っていくうちに慣れてきます。慣れている人と、慣れていない人のギャップは相当の差が出ると思います。
scpでファイル転送
OpenSSHクライアントはscpコマンドもサポートしているので、ローカルファイルをUbuntuにアップロードすることが出来ます。
従来ではファイルアップロードはFTPで行うことが多かったと思いますが、SSH接続が出来るとscpコマンドでファイルを転送することが出来るので、単純にファイルコピーするだけのためにFTPサーバーを用意しなくてもファイルを届けることが出来ます。
※scp = "Secure Copy" の略の様です。
以下、仮に Windows側の D:\Temp\test.zip をUbuntuへコピーするものとしてのコマンド使用例です。
まずUbuntuへコピーする先の正確なパスが必要です。tempフォルダにコピーするものとして、Ubuntuへ接続しtempフォルダを作成しpwdで確認しておきます。
ssh adminuser@172.24.0.78
adminuser@ubuntu1:~$ mkdir temp adminuser@ubuntu1:~$ cd temp adminuser@ubuntu1:~/temp$ pwd /home/adminuser/temp
コピー先は、/home/adminuser/temp になりますね。
scpコマンドでは、カレントのファイルを指定するので、コピーするファイルがあるフォルダにカレントを移動します。
※Windows上のPowerShellです。Ubuntuにssh接続しているしている状態ではありません。
D: cd D:\Temp
カレントに移動したら、scpコマンドでファイルを転送します。
scpの構文は、
scp [送るファイル] [ユーザー名@ホスト名 or IPアドレス]:[転送先パス]
になるので、次のコマンドで送ることが出来ます。ユーザーのパスワードを訊かれます。
PS D:\Temp> scp test.zip adminuser@172.24.0.78:/home/adminuser/temp adminuser@172.24.0.78's password: test.zip 100% 244 223.1KB/s 00:00 PS D:\Temp>
Ubuntu側で確認すると、今コピーしたファイルが確認出来ます。
adminuser@ubuntu1:~/temp$ ls test.zip
接続済みホスト情報のクリア
さて、フィンガープリントの確認で「yes」を入力した以降は訊かれなくなるのですが、
これはクライアント側で許可したことを覚えているためで、以下のコマンドで削除することが出来ます。
ssh-keygen -R [ホスト名 or IPアドレス]
削除後にログインすると、初回時と同じように訊かれるようになります。
また、この覚えられた状況が原因(Ubuntu側のキーと何らかの原因で合わない)でログインが出来なくなった場合にも、ホスト情報をクリアすると改善できる可能性があります。
コメントする