3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SSH接続できるが、SFTP接続できない

Posted at

機械学習などでGPUを利用するソフトウェアパッケージを使うには環境整備が面倒です。
そこで、Dockerを使うことで、パッケージに適した環境を簡単に作ることができます。とりわけ、既に構築済みのdocker imageがDockerhubから無料でダウンロードできるため、環境構築は非常に便利にできるようになりました。しかし、Dockerhubで提供される環境では、必要最小限のものしか入っていない場合があり、例えばSSH用のパッケージが入っていない場合があり、これを自分でインストール・設定しなければいけません。ここでは、備忘録として、SSH構築できたが、SFTPサーバーに接続できない時の対処法を記録しておきます。

Docker container の構築

例えば、ここからTensorflowの公式Docker imageをダウンロードできます。
https://hub.docker.com/r/tensorflow/tensorflow

指示に従ってdocker containerを立ち上げます。

$ docker run -it --rm -p 8022:22 tensorflow/tensorflow:1.15.2-gpu-py3-jupyter bash

上記コマンドを実行すると、docker containerの中に入ります。(このcontainerは一度外に出る(exit)と、自動的に消去されます。消去したくない場合は、--rmを消してください。)
-p 8022:22はポート番号8022からこのcontainerに入れることを意味します。複数のcontainerを構築して、それぞれにSSHで接続したい場合は、異なるポート番号を振り分けることで、接続したいcontainerを指定できます。

SSHサーバーの構築

今インストールされているパッケージ一覧をみると、SSH関連のものが入っていません。
apt list --installed

そこで、openssh-serverをインストールします。

# apt update  # インストール情報を最新版に更新します。
# apt install openssh-server  # インストール実行

パスワードを設定します。

# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

もしrootユーザーでsshを使いたい場合は、sshd_configをそのように書き換える必要があります。

# sed -i.bak 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

最後にSSHサーバーを起動します。

# /etc/init.d/ssh start

これでSSHサーバーの構築は完了です。
Containerの外から、SSHでこのcontainerに接続してみましょう。

$ ssh -p 8022 root@localhost
Bad owner or permissions on ~/.ssh/config
# もし上記メッセージが表示された場合は、下記コマンドを実行してください。
$ chmod 600 ~/.ssh/config
$ ssh -p 8022 root@localhost
The authenticity of host '[localhost]:8022 ([::1]:8022)' can't be established.
ECDSA key fingerprint is SHA256:
Are you sure you want to continue connecting (yes/no)?

これで今作った、docker containerに入ることができます。

しかし、SFTPサーバーには接続できません。

$ sftp -oPort=8022 root@localhost
root@localhost's password: 
Received message too long 458961211

そこで、またsshd_configを書き換えます。

$ apt install vim
$ vim /etc/ssh/sshd_config 

下の方にこの行の部分を
Subsystem sftp /usr/lib/openssh/sftp-server
これに書き換えます。
Subsystem sftp internal-sftp
これで、sftpサーバーに接続できるようになります。
vimを終了するときは、【Esc】を押した後、:wq! と入力してEnterを押すと、上書き保存して終了します。

$ sftp -oPort=8020 root@localhost
root@localhost's password: 
Connected to localhost.
sftp>
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?