UbuntuへのSSH接続, SCPファイル転送の方法

2020-10-03 | コメント(0)

UbuntuにSSHサーバーをインストールして、PowerShellでSSH接続, SCPファイル転送の方法をエントリーします。

(注:UbuntuにPowerShellをインストールするエントリーではありません)

目次

※ Ubuntu は 18.04 で、実機のIPアドレスは 172.24.0.78 として説明しています。
こちらのHyper-V上に作成したUbuntuになります。

SSHサーバーの確認。sshdサービスのステータスを確認してみます。

sudo service sshd status

sshdがインストールされていなければ次のように Unit sshd.service could not be found. が表示されます。

sshd.service could not be found

SSHサーバーとしては、次のコマンドで openssh-server をインストールします。

sudo apt install openssh-server

install openssh-server

install openssh-server check

y を入力

install openssh-server done

インストール完了。

あらためて sshd サービスを確認

sudo service sshd status

sshd status

ssh.service というものが起動しているのが判ります。
(CTRL + c で抜ける)

インストール直後なので、念のため sshd をリスタートしておきます。

sudo service sshd restart

sshd restart

UbuntuのSSHサーバーとしての作業はこれで完了です。

SSHサーバーは、デフォルトで TCPポート22で動作しますので、ファイアーウォール等があれば通過できる状態にしておいてください。

ちなみに、ここでは ufw は無効の状態で進めます。
セキュリティを高めるために、ufw有効化やデフォルトのSSHポート番号(22)を変更するなどがありますが、デフォルトのまま進めます。

この後、このUbuntuにSSH接続でログインしますが、ログイン直後の現在位置と配下のファイルが一致していることを確認するために、pwd と ls で、ファイルの状態を見ておきます。

pwd

ls

home path & files

ターミナルを終了し、ログアウトします。

ubuntu logout1

ubuntu logout2

Ubuntu側の設定はこれで完了です。

Ubuntuをシャットダウン、再起動した後もSSHサーバーは起動されます。

今後は、Ubuntu デスクトップとしてログインすることはあまりなくなるはずです。

ここからは、Windows側の操作になります。

PowerShellを起動し、ssh コマンドの確認をしてみます。
これは管理者では無く一般ユーザーでも大丈夫です。

PowerShellは (x86) では無く、通常のほう(64 bit)を使います。また、PowerShell ISE も駄目です。

ssh

ssh command

もしこのような画面にならず、エラーが表示される場合は ssh が使えない状態なので、OpenSSH クライアントをインストールします。

OpenSSH クライアントのインストールは管理者で行う必要があります。

Windowの設定で「オプション」..を入力し「オプション機能の管理」を選択

Windows の設定 オプション機能の管理

「OpenSSH クライアント」があるのでインストールします。画面はインストールされている状態のものです。

オプション機能 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 [ユーザー名]@[ホスト名 or IPアドレス]

の形式なので、

ssh adminuser@172.24.0.78

で接続します。

ssh 接続

ssh フィンガープリント確認

初回接続の場合、Ubuntu側のフィンガープリントが表示され、接続して良いか訊かれるので「yes」を入力します。「yes」を入力すると次回以降は訊かれることはありません。このクリアについては後述の接続済みホスト情報のクリアを参照。

その後、ユーザーのパスワードを入力するとUbuntuに入れます。

ssh パスワード入力

ssh 接続完了

ログイン直後で、pwd と ls を確認

pwd

ls

ssh home状況

デスクトップのターミナルで確認したものと同じはずです。

今後、Ubuntuの操作はここから行うようにします。

Windowsメインの人は(ほとんどの人がそうだと思います)、最初はCUI環境が辛いと思いますが、それでも使っていくうちに慣れてきます。慣れている人と、慣れていない人のギャップは相当の差が出ると思います。

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 接続(再度)

これはクライアント側で許可したことを覚えているためで、以下のコマンドで削除することが出来ます。

ssh-keygen -R [ホスト名 or IPアドレス]

削除後にログインすると、初回時と同じように訊かれるようになります。

ssh フィンガープリント確認(再度)

また、この覚えられた状況が原因(Ubuntu側のキーと何らかの原因で合わない)でログインが出来なくなった場合にも、ホスト情報をクリアすると改善できる可能性があります。

カテゴリ:

コメントする

※HTMLタグは使えません

Author

あきちゃん

主に、.NETでWebシステムの設計と開発をしています。
(茨城県在住, 都内勤務)
プロフィール