質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Red Hat Enterprise

Red Hat Enterpriseは、レッドハット社により開発・サポートが行われている業務向けLinuxディストリビューションです。オープンソースで無償で利用することができ、バイナリ版の入手・サポートは有償です。商用ディストリビューションとして人気が高く、代表的なLinuxの選択肢の一つです。

Q&A

解決済

3回答

17515閲覧

公開鍵を使ったSSH接続で自分自身に接続するとパスワードを求められてしまう

310uk

総合スコア13

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Red Hat Enterprise

Red Hat Enterpriseは、レッドハット社により開発・サポートが行われている業務向けLinuxディストリビューションです。オープンソースで無償で利用することができ、バイナリ版の入手・サポートは有償です。商用ディストリビューションとして人気が高く、代表的なLinuxの選択肢の一つです。

0グッド

0クリップ

投稿2018/11/09 06:25

編集2018/11/09 08:36

前提・実現したいこと

現在RHEL6.5で稼働しているWebアプリケーションのログを、Webサーバから他のサーバにSSHでファイル転送しています。
その動きの中で、(仕様の良し悪しは置いといて)自分自身にもSSHで繋いでファイル転送しています。
cronでバッチ(*.sh)を動かしているため、鍵交換方式でパスワード不要で接続できるようにしています。
※現在正常稼働中です

そのアプリケーションの検証環境を構築しようとしており、そちらはCentOS6.5を使っています。

稼働環境と検証環境の差異は、以下の通りです。

  • OS

稼働環境⇒RHEL6.5
検証環境⇒CentOS6.5

  • サーバ構成

稼働環境⇒Webサーバ、DBサーバ、BKサーバが、それぞれオンプレサーバで稼働
検証環境⇒Webサーバ、DBサーバ、BKサーバを1台のオンプレサーバで稼働

  • OpenSSHバージョン

両環境共⇒OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

発生している問題

次に書くコマンドを実行して、鍵の生成と、自分自身への公開鍵の転送を行いましたが、SSH接続時にパスワードを求められてしまいます。

実行したコマンド

#sh実行ユーザに切り替え su - hoge #鍵生成 #途中のプロンプトは全て空のままEnter ssh-keygen -t rsa #鍵を転送 ssh-copy-id -i /var/hoge/.ssh/id_rsa.pub hoge@localhost #繋ぐとパスワードが求められてしまう ssh hoge@localhost

試したこと

  • ssh-copy-idコマンドで転送するサーバの指定とsshコマンドの接続先を、localhost以外に以下の3つも試しましたが変わりませんでした。

・127.0.0.1
・hostsに書いたホスト名
・ネットワーク上のIPアドレス

  • /var/hoge/.ssh/配下のauthorized_keysknown_hostsの各ファイルの内容を確認したところ、正しいと思える内容が追記されていました。

※4つのサーバ指定が全て記載されていた

  • ググっていたところ(teratail内にもありましたが)ホームディレクトリや.sshディレクトリおよび配下のファイルのアクセス権設定が不適切な可能性、という話が見つかったので、正常に動作している稼働環境のアクセス権と同一に設定し直しましたが、状況は変わりませんでした。

※補足情報参照

  • /etc/ssh/sshd_configの設定は、両環境共同一であることを確認済みです。

PermitRootLoginを変更した以外はデフォルト

  • あえて/etc/ssh/sshd_configRSAAuthenticationPubkeyAuthenticationを有効にしてyesを指定してみましたが、ダメでした。
  • サーバの再起動もしました。変化ありません…

補足情報

  • .sshディレクトリ配下の各ファイルのアクセス権は以下の通りです。
-rw------- 1 hoge hoge 3906 11月 9 10:32 2018 authorized_keys -rw------- 1 hoge hoge 1675 11月 9 10:16 2018 id_rsa -rw-r--r-- 1 hoge hoge 393 11月 9 10:16 2018 id_rsa.pub -rw-r--r-- 1 hoge hoge 3537 11月 9 10:36 2017 known_hosts
  • /var/log/secureの出力内容は以下の通りです。

鍵見に行ってない…

Nov 9 16:01:42 backup-t su: pam_unix(su-l:session): session opened for user hoge by root(uid=0) Nov 9 16:01:54 backup-t sshd[3512]: Accepted password for hoge from ::1 port 40532 ssh2 Nov 9 16:01:54 backup-t sshd[3512]: pam_unix(sshd:session): session opened for user hoge by (uid=0) Nov 9 16:01:57 backup-t sshd[3516]: Received disconnect from ::1: 11: disconnected by user Nov 9 16:01:57 backup-t sshd[3512]: pam_unix(sshd:session): session closed for user hoge Nov 9 16:01:59 backup-t su: pam_unix(su-l:session): session closed for user hoge
  • sshコマンドに-vスイッチを付けてデバッグモードで実行してみました。

しかし何故パスワード認証に移行してしまうのかが分かりません…

[hoge@backup-t ~]$ ssh -v localhost OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug1: Connecting to localhost [::1] port 22. debug1: Connection established. debug1: identity file /var/hoge/.ssh/identity type -1 debug1: identity file /var/hoge/.ssh/identity-cert type -1 debug1: identity file /var/hoge/.ssh/id_rsa type 1 debug1: identity file /var/hoge/.ssh/id_rsa-cert type -1 debug1: identity file /var/hoge/.ssh/id_dsa type -1 debug1: identity file /var/hoge/.ssh/id_dsa-cert type -1 debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3 debug1: match: OpenSSH_5.3 pat OpenSSH* debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_5.3 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr hmac-md5 none debug1: kex: client->server aes128-ctr hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Host 'localhost' is known and matches the RSA host key. debug1: Found key in /var/hoge/.ssh/known_hosts:2 debug1: ssh_rsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password debug1: Next authentication method: gssapi-keyex debug1: No valid Key exchange context debug1: Next authentication method: gssapi-with-mic debug1: Unspecified GSS failure. Minor code may provide more information Credentials cache file '/tmp/krb5cc_500' not found debug1: Unspecified GSS failure. Minor code may provide more information Credentials cache file '/tmp/krb5cc_500' not found debug1: Unspecified GSS failure. Minor code may provide more information debug1: Unspecified GSS failure. Minor code may provide more information Credentials cache file '/tmp/krb5cc_500' not found debug1: Next authentication method: publickey debug1: Trying private key: /var/hoge/.ssh/identity debug1: Offering public key: /var/hoge/.ssh/id_rsa debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password debug1: Trying private key: /var/hoge/.ssh/id_dsa debug1: Next authentication method: password

恐れ入りますが、どなたかお知恵をお貸しいただければと思います。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ssh hoge@localhost

をrootユーザで実行していませんか

この場合、鍵を作成したhogeではなく自分の鍵(/root/.ssh/id_rsa)を使おうとします。
そのため、鍵認証できない→パスワード認証に移行となっています。

hogeユーザでコマンドを実行する(この場合、ssh localhostでいいのですが)

[hoge@hostname ~]$ ssh hoge@localhost

または、使用する鍵を指定します

[root@hostname ~]# ssh -i /home/hoge/.ssh/id_rsa hoge@localhost

ssh接続のときのログは /var/log/secure に記録されますので、こちらも参考するとどんな挙動しているか確認できます

投稿2018/11/09 06:53

編集2018/11/09 06:56
yukky1201

総合スコア2751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

310uk

2018/11/09 06:56 編集

早速のご回答ありがとうございます! 「実行したコマンド」の最初にも記載した通り、ssh接続を実行するユーザに切り替えた上で作業しております。 #sh実行ユーザに切り替え su - hoge
yukky1201

2018/11/09 06:58

回答も編集したのですが、ログにどんな接続されたか記録されますので質問に追記してください 私がテストしたところ下記のとおりでした Nov 9 15:47:38 centos6 sshd[2022]: Accepted publickey for hoge from 127.0.0.1 port 57244 ssh2 Nov 9 15:47:38 centos6 sshd[2022]: pam_unix(sshd:session): session opened for user hoge by (uid=0)
310uk

2018/11/09 06:59

追記です。 ssh localhost でも状況は変わらないことを確認済みです。 明示的に鍵を指定するのもやってみましたが、変わりませんでした。(汗)
yukky1201

2018/11/09 07:02

該当のログファイルは/var/log/secureです
310uk

2018/11/09 07:24 編集

今改めて実行して、secureログを確認しました。 Nov 9 16:01:42 backup-t su: pam_unix(su-l:session): session opened for user hoge by root(uid=0) Nov 9 16:01:54 backup-t sshd[3512]: Accepted password for hoge from ::1 port 40532 ssh2 Nov 9 16:01:54 backup-t sshd[3512]: pam_unix(sshd:session): session opened for user hoge by (uid=0) Nov 9 16:01:57 backup-t sshd[3516]: Received disconnect from ::1: 11: disconnected by user Nov 9 16:01:57 backup-t sshd[3512]: pam_unix(sshd:session): session closed for user hoge Nov 9 16:01:59 backup-t su: pam_unix(su-l:session): session closed for user hoge 全然鍵見に行ってませんね…汗
yukky1201

2018/11/09 07:21

明示的にsshd_configのPubkeyAuthentication yesに変更してみてはどうでしょう
310uk

2018/11/09 07:39 編集

以前も試してみたんですが、試したことを失念していたので質問に追記しました。 改めてやってみましたが、やはり駄目でした… ※sshd再起動はもちろん実施しました
yukky1201

2018/11/09 07:56

おかしいですねぇ。パーミッションが間違いのときはその旨がログに出力されますので、現象からはauthorized_keysの不備(ファイルがないともちろん不可。合致する鍵ないと不可)と思えるので、念のため再確認ください sdiffコマンドあたりで行は同一だよ。とか確認してみてください $ sdiff id_rsa.pub authorized_keys
310uk

2018/11/09 08:06 編集

ちょっといろいろやってしまった影響かsdiffの結果に差異がありましたので、いったん.ssh配下を空にして、再度鍵生成~転送までやってみました。 状況変わりませんでした… sshコマンドに-vスイッチがあるのを見つけたので、デバッグモードで実行してみましたので質問に追記しました。 しかし何故パスワード認証に移行してしまうのかが分かりませんでした。汗
yukky1201

2018/11/09 08:20

ホームディレクトリを/var/hogeで作成されてますが、これを一般的に/home/hogeで作られたらどうなりますでしょうか
yukky1201

2018/11/09 08:22

/var/hogeが正しければ質問に記載の鍵を転送のパスが違いますね
310uk

2018/11/09 08:37 編集

あ、ゴメンなさい、パスの置換漏れです。 実際の環境は/var/hogeがホームディレクトリなんですが、ちょっと特殊なので/home/hogeに置換して記載していました。 全て実環境に近い/var/hogeに修正しました。<(_ _)> ちなみに、正しく動いているRHELの環境も、実際は/var/hogeがホームディレクトリです。
310uk

2018/11/09 08:39

この「hoge」ユーザ(実際は違う名前)はアプリケーションの実行ユーザで、システムの仕様でホームディレクトリを/var/hogeから動かすことができないんです…
yukky1201

2018/11/09 08:53

/var/***をホームディレクトリにしたユーザで試してみましたが、こちらでも鍵認証できずパスワード認証になってしまいました
310uk

2018/11/09 09:17

私もCentOSで確認してみました。 ssh_testというユーザを作り、 ・ホームディレクトリを/home/ssh_testに設定して公開鍵を生成して対応⇒成功 ・ホームディレクトリを/var/ssh_testに変更して公開鍵を生成し直して対応⇒失敗 まさかの、そんな理由ですが… RHELとCentで、同じバージョンでもそんな違いがあるんですか…
matsuand

2018/11/09 09:57

自分自身へのアクセスなので、``Offering public key: /var/hoge/.ssh/id_rsa`` という出力は、id_rsa.pub を見に行っているということかな・・と。id_rsa.pub と id_rsa が一致していないってことないですか?
310uk

2018/11/09 10:05 編集

matsuand さま、ご回答ありがとうございます。 > id_rsa.pub と id_rsa が一致していない 手順的には有り得ないと思います…何度も確認して実施しましたから恐らく…汗
310uk

2018/11/09 10:03

補足です。 sshコマンドの-iスイッチで明示的に公開鍵を指定してもダメでした。 あと「Offering public key: /var/hoge/.ssh/id_rsa」の出力は、問題なく動いてるRHEL環境でも出ていました。
matsuand

2018/11/09 10:04

id_rsa.pub ってここに置かなくて良い? 置かない方が良い? とか。id_rsa.pub がなければうまくいきませんか?
yukky1201

2018/11/09 10:07

私もそれぞれ/home/**、/var/**で実施して同事象を確認していますので手順には問題ないと思います
310uk

2018/11/09 10:08

試しましたが駄目でした…
310uk

2018/11/12 06:00

@yukky1201さま 今日、検証環境の該当ユーザのホームディレクトリを以下のように修正したところ、問題なく接続できるようになりましたので報告いたします。 usermod -d /home/hoge/ -m hoge 最初から正確な情報を提示できていればもっと解決が早かったかもしれません、余計なことをしてしまいました。 ご丁寧にご対応いただき、ありがとうございました。
guest

0

完全に解決しました。
結論を言うと、本質的な問題はホームディレクトリではなく、ただ単にSELinuxが有効になっていたせいでした。汗

getenforceコマンドを実行するとenforcingが返ってきたので、/etc/selinux/configを編集してdisabledに設定変更し直し、再起動後に同じことを試したら、パスワードを聞かれることなく接続できるようになりました。

お騒がせ致しました!!!

投稿2018/11/13 01:11

310uk

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukky1201

2018/11/13 01:40

盲点でした。auditログにもauthorized_keysのread拒否のログが出てました。 /home/~と/var/~を比べてみました 下記にてコンテキスト変更するとSELinux有効のままでもパスワード聞かれることなく認証できます chcon -R unconfined_u:object_r:ssh_home_t:s0 .ssh/
310uk

2018/11/13 02:43

こちらもauditログ確認してみたら、同様に出ていました。 chconというコマンドは初めて知りました。サンプルのご提示ありがとうございました。 今回のシステムはSELinuxを有効にしておく必要はなさそうですので、無効化で対応します。<(_ _)>
guest

0

自分にアクセスするわけですから ssh_config (d なし) の設定も関係するってことはないでしょうか?

投稿2018/11/09 10:21

matsuand

総合スコア186

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

310uk

2018/11/09 10:26

確かにそうですね。 今日は退社してしまって実環境がもう見れないので、来週稼働環境と検証環境の差異がないか確認してみます。
310uk

2018/11/12 05:40

せっかくご回答いただいたのに確認に時間が掛かってしまい申し訳ありませんでした。 成功しているRHELと上手く行かないCentOSとで、/etc/ssh/ssh_configの内容を比較したところ、後者には暗号化形式(Ciphers,MACs)の記載がなかったので追記しました。 結果、変わりなく繋がりませんでした。(汗)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問