(更新)QNAPにOpenSSHを入れて接続

投稿者:arrumis

更に追記(2017/10/06):バージョン4.3.3で確認しましたが、デフォルトのSSHでユーザーを指定してのSSHログインが出来るようになっているようです。色々いじる必要も無く、「コントロールパネル」->「TELNET/SSH」->「SSH接続を許可する」にチェックを入れ、下にある「アクセス許可の設定」からユーザーをしてすることでSSHが有効になる。

 

(追加の追加情報 2015/10/29)Var4にアップデートしたら、ipkgが使えなくなっているので、この記事のように行っても無駄になりました。新しい方法はこちらの記事を参考に。といってもリンクを張ってるだけですが。

久しぶりにlinux系のお話。

 

前置き

相も変わらず、忘備録なので信じちゃだめですよ。私がうまく動いても他の人が動くという保証はないですからね!

というテンプレはさておき。何がしたいかというと。現在のデスクトップPCがUBUNTU15.04なので、QNAPの提供しているQSYNCというフォルダ同期ソフトが使えない。
クライアント(デスクトップ)PCがlinux系なので、rsyncをcronで動かせばいいだろう。という発想に落ち着いた。

さて、それでrsyncについて調べてみたら、どうやらSSH通信をしているらしい。

さて、それでQNAPについて調べてみたら、どうやらSSH通信がメンドクサイらしい。

 

ということで、まずはQNAPにSSH通信をできるようにしよう。という話。

んでもって、QNAP標準のSSHを使ってみたら、これはビックリ、admin(管理者)しかログインできない。とのこと。私の感覚だと、管理者以外でのSSHログインは認めるが、管理者NGってのが普通だと思ってたので、こりゃいかん。どうにかして、一般ユーザーのSSH通信を確保せねば。

という経緯がある。

ということで、QNAPにOpenSSHを入れて、一般ユーザでのSSH通信を行う。というのがこの忘備録の目的である。

まずは、参照した偉大な先人たちのリンクを。

homeフォルダがsmbなどでアクセスされるとパーミッションが777に変更されるので
その対策として
ipkgのopensshで鍵認証時Permission deniedになる | Jump2Fin4U

QNAPを再起動したときにリセットされない方法
Running Your Own Application at Startup – QNAPedia

OpenSSHを入れる大きな流れ
QNAP SSH接続を公開鍵認証にする – QiitaQNAPのNASにOpenSSHを入れる – つくもめも

SSH通信不可時の原因追及の手助け
入門OpenSSH / 第7章 うまくいかない時は

 

ここにコードを入れます

Opensshの導入の目的と方法

SSH通信でログインしたいが、adminでの接続は怖いので、一般ユーザID+鍵認証+ポート変更、のコンボで使いたい。

OpenSSHの導入

試行錯誤のすえにできたので、余分な設定などが含まれる可能性がとても高い。
まず最初に、opensshを入れるための準備をする。

  1. AppCenterからOptwareIPKGというソフトをインストールする。
  2. telnetや標準のSSHでQNAPに接続し、以下のコマンドを実行
    $ ipkg update
    $ ipkg install openssh
    $ /opt/etc/init.d/S40sshd start
    
  3. この時点で、「Could not load host key: /opt/etc/openssh/ssh_host_ecdsa_key」と言われると思うので、次のコマンドで鍵を作る。
    ただし、今回はこの鍵は使わない。今回使用するカギは、クライアント側でssh-keygenで生成した鍵を使う。これの内容については割愛する。
$ /opt/bin/ssh-keygen -f /opt/etc/openssh/ssh_host_ecdsa_key -t ecdsa -N ''
$ /opt/etc/init.d/S40sshd start

これで、QNAPにopensshが入って動き出したことになる。

opensshの設定の前に

SSHについて、少々おさらい。

  1. UbuntuのコンソールでのSSHの発行は以下(どちらでも大丈夫な、はず)
    
    ssh -2 -p ポート番号 -l ユーザー名 サーバーIPアドレス -i 秘密鍵
    
    ssh -2 -p ポート番号 ユーザー名@サーバーIPアドレス -i 秘密鍵
    
    
  2. サーバーにおいておくのは、パブリックキー(id_rsa.pubなど.pubとつく場合が多い)、クライアント(手元のPC)においておくのはプライベートキー(id_rsaと言われることが多い)
  3. 鍵のパーティション。権限。これが一番間違いやすい。以下をすべて満たすこと。
    • クライアント .ssh/ : 700
    • クライアント .ssh/id_rsa : 600(自分以外が実行できない数字)
    • サーバー .ssh/ : 700
    • サーバー .ssh/authorized_keys : 600   (id_rsa.pubから作られる)

QNAPの特性による調整項目

QNAPは普通にconfigファイルをいじるだけでは、再起動した時にリセットされて
しまうので、その対策が必要となる。
その時に、ものすごくわかりにくいのが、シンボリックリンク。
linuxに疎い私はよくわからなくなってしまったので、ここにまとめておく。
表記方法は以下のようにしておく。
ただし、私のQNAPでの話なので型番が異なれば、これらも異なる可能性があることを
頭に入れて読んでほしい。
QNAP型番:TS-869L Ver4.1.4

  1. シンボリック元 ->  シンボリック先
  2. .ssh -> /etc/config/ssh/
  3. /share/homes -> CACHEDEV1_DATA/homes/
  4. /etc/config -> /mnt/HDA_ROOT/.config/
  5. /opt -> /share/CACHEDEV1_DATA/.qpkg/Optware/

以上のシンボリックリンクを押さえておくと、だいぶ理解しやすくなる。
続いて、ユーザーのホームフォルダの場所は、passwdでわかる

cat /etc/passwd

で表示させたところがホームフォルダである。
ついでにbin/shが通ってることも確認しておくこと。
これによると、

/share/home/hoge

となっている。つまり、先ほどのシンボリックリンクで、実体のパスを考えると

/share/home/hoge ->  CACHEDEV1_DATA/homes/hoge

となる。ここのCACHEDEV1_DATAは/mnt/以下に存在しているので、
フルパスは /mnt/CACHEDEV1_DATA/homes/hoge ということになる。

ここまでのシンボリックリンクの話は私が混乱したため書いたが、以下に
記載するパスはシンボリックであることを考えず、コンソール上にポチポチと
打ったパスを書いている。あしからず。

設定ファイルの変更の前の準備

opensshのsshd_confを変更する。
ここで注意するのは、先ほど書いたように、再起動時にリセットされるので、
confファイルをリセットされないように避難させておき、起動時に読み込むように
設定しなければならない。

cp -p /opt/etc/openssh/sshd_config /share/CACHEDEV1_DATA/.qpkg/autorun/sshd_config

コンフィグファイルを再起動しても消えない場所に避難する。
最初の時点ではautorunフォルダが無いと思われるので、mkdirで制作しておくこと。

drwxr-xr-x    2 admin    administ      4096 Jun 24 16:21 autorun/

となっていればいい。

ダミーパッケージを追記することで、この問題に対応する。

  • /etc/config/qpkg.conf に autrun という名前のダミーパッケージを追記。
[autorun]
Name = autorun
Version = 0.1
Author = me
Date = 2015-06-24
Shell = /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
Install_Path = /share/CACHEDEV1_DATA/.qpkg/autorun
Enable = TRUE

この中の「SHELL」と書かれたパスのスクリプトが起動時に読み込まれる。
autorun.shの中身とautorunフォルダの中の状態。

[~] # cat /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
#!/bin/sh
cp -p /share/CACHEDEV1_DATA/.qpkg/autorun/sshd_config /opt/etc/openssh/
/opt/etc/init.d/S40sshd restart

[~] # ls -al /share/CACHEDEV1_DATA/.qpkg/autorun/
drwxr-xr-x    2 admin    administ      4096 Jun 24 16:21 ./
drwxrwxrwx   14 admin    administ      4096 Jun 24 15:49 ../
-rwxr-xr-x    1 admin    administ       114 Jun 24 16:21 autorun.sh*
-rw-r--r--    1 admin    administ      3197 Jun 24 17:29 sshd_config

設定ファイルの変更

設定ファイルsshd_confはいじりすぎて、元の状態からどういうふうに
変わったのか、よくわからなくなったので、全文を記載する。
確実に変えたのは以下の通り。

  • Port 任意のポート番号
  • Protocol 2
  • RSAAuthentication yes
  • PubkeyAuthentication yes
  • AuthorizedKeysFile /mnt/HDA_ROOT/.config/ssh/%u/authorized_keys (%uはユーザーIDを示す。読み込んだ時にユーザー名に変換される。
    確認方法は $ id hoge で見られるはず)
  • PasswordAuthentication no
  • PermitEmptyPasswords yes
  • Subsystem sftp /usr/libexec/sftp-server
  • AllowUsers admin hoge1 hoge2
[~] # cat /opt/etc/openssh/sshd_config
#	$OpenBSD: sshd_config,v 1.74 2006/07/19 13:07:10 dtucker Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.

#Port 22
Port ポート番号
#Protocol 2,1
Protocol 2
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel DEBUG

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile	.ssh/authorized_keys
AuthorizedKeysFile	/mnt/HDA_ROOT/.config/ssh/%u/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords yes

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no

#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
UsePrivilegeSeparation no
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no

# no default banner path
#Banner /some/path

# override default of no subsystems
Subsystem	sftp	/usr/libexec/sftp-server

AllowUsers admin hoge1 hoge2
# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	ForceCommand cvs server

opensshの再起動とチェック

ここまでで設定が終わったはずである。
今一度、パーティションの確認をしておく。
鍵認証で使うのは、/mnt/HDA_ROOT/.config/ssh/%u/authorized_keys
であるので、/ssh/が

drwxr-xr-x    3 admin    administ      4096 Jun 24 16:31 ssh/

の状態。755。
その下/%u/、各自の環境では/hoge/など。

drwx------    2 hoge    hogehoge      4096 Jun 24 16:54 hoge/

の状態。700。
そして、鍵 authorized_keysが

-rw-------    1 hoge    hogehoge       394 Jun 24 16:18 authorized_keys*

の状態。600。

SSHを発行して、接続してみる。
この時点で接続できれば、問題ないが、接続できない時は、以下の方法で
原因を探る。

  1. 標準のSSH、またはtelnetで接続し、opensshをkillする。
    $ cat /opt/var/run/sshd.pid
    プロセスIDが表示
    $ kill プロセスID
    

    これで、opensshが終了したことになる。

  2. 続いてopensshを起動するが、
    デバックを有効にして立ち上げる
$ /opt/sbin/sshd -ddd

これで、デバッグモードで立ち上がる。

  • 別のコンソールを立ち上げ、opensshに対してのSSH接続を発行する
    $ ssh -p ポート番号 hoge@IPAddress -i .ssh/id_rsa -vvv
    
  • 双方のコンソールにdebug~がズラズラと出てくるので、その中で問題点を
    探す。

 

Linux|2017年10月6日|2:40 PM|(更新)QNAPにOpenSSHを入れて接続 はコメントを受け付けていません。			



コメントは受け付けていません。

« »