Perl / Shスクリプトを介して他の仮想マシンへのSSH接続が失敗します。手作業

Perl / Shスクリプトを介して他の仮想マシンへのSSH接続が失敗します。手作業

同じフォルダ()でbashスクリプトを実行するa_web_page.cgi開発ボックスでPerl CGIスクリプト()を実行したいと思います。.1.20host_script.sh

その後、スクリプトは他のサーバーに対してSSHコマンドを実行します1.10。このサーバーは単に文字列を返すスクリプトを実行します。

./host_script.shme私がキーの所有者になる限り、script()を手動で実行すると機能します。 (キーはテスト目的でスクリプトと同じフォルダに保存されます。)

デフォルトでは、キーの所有者はですapache

問題は、apacheこのキーを使用してもまだ機能しないことです。以下に説明しました。

このコマンドは.(開発ボックス)の仮想マシンで実行されます192.168.1.20。ローカルボックスからSSHを介して仮想マシンに入りました。192.168.1.50

  • 192.168.1.10ターゲットコンピュータとscript1.sh。スクリプトは文字列を返します。
  • 192.168.1.20とを使用してApache Webサーバーを実行しているa_web_page.cgiサーバーhost_script.sh。 (私はこのボックスでこのコマンドを実行しています。)
  • 192.168.1.50私のローカルコンピュータは実際に考慮してはいけませんが、役に立つ場合に備えてここに置いてください。

から192.168.1.20

ls - 卵

-rwxrwxrwx. 1 me apache  622 Apr 12 09:19 a_web_page.cgi
-rwxrwxrwx. 1 me apache  111 Apr 11 15:14 host_script.sh
-rwx------. 1 apache apache 1675 Apr 11 15:11 test
-rwx------. 1 apache apache  392 Apr 11 15:11 test.pub

vim ホスト script.sh

#!/bin/bash
ssh -i /var/www/html/dev/remote_script/test [email protected] "/home/user/scripts/script1.sh"

a_web_page.cgi

#!/usr/bin/perl

use strict;
use warnings;

print "Content-type: text/html\n\n";

my $executeString = './host_script.sh';
my $output = `$executeString`;
print "<br />$executeString<br />: $output<br />";

出力(http://192.168.1.20/dev/remote_script/a_web_page.cgi):

./host_script.sh
: 

sudo tail -f /var/log/httpd/error_log

[Tue Apr 12 10:05:22 2016] [error] [client 192.168.1.50] ssh: connect to host 192.168.1.10 port 22: Permission denied\r

(クライアントIPが開発ボックスではなく私のローカルボックスである理由は混乱しています。)

設定されている場合

 inet addr:192.168.1.20

(SSHセッションを終了してローカルコンピュータでifconfigを実行した場合。192.168.1.50

この段階でSSHが失敗することがわかるので、自分で実行する権限を与えて192.168.1.10実行してみましょう。host_script.sh

sudo chown me テスト

これはうまくいきます。

./host_script.sh

This is a script on the 192.168.1.10 server!

(この文字列はscript1.shonから返され、1.10単にechoステートメントです。)

したがって、キーを読み取る権限がある限り、スクリプトを直接実行しても問題はありません。

-rwx------. 1 me apache 1675 Apr 11 15:11 test
-rwx------. 1 me apache  392 Apr 11 15:11 test.pub

ベストアンサー1

sshコマンドを手動で実行するときにパスワードなしのSSHを設定し、~user/.sshに必要なキーがあるとします。 Webページを介してこのプログラムを実行すると、ユーザーapache(またはユーザーhttpd)でsshが実行され、キーは〜apache / .sshが使用されます。ユーザーにパスワードのないSSHがないため、「権限が拒否されました」。

192.168.1.50でWebページを表示しているため、error.logに示すようにssh(192.168.1.20で実行中)が192.168.1.10に接続できないというエラーが発生します。これは正しいです。

この問題を解決するさまざまな方法:
- apacheが自分のユーザーとしてsshを実行できるように、apacheにsudoアクセスを許可します。 "sudo -u me -c 'ssh 192.168.1.10 'script1.sh'"のようにすると、apacheはsudoを使用して切り替えます。あなたにsshを実行しなさい。
- Apacheに両方のホストにホームディレクトリを持たせ、Apacheユーザー用のパスワードなしのSSHを設定し、すべての操作をApacheとして実行します。

セキュリティ上の問題が懸念される場合は、Webサービスなどの代替ソリューションを見つける必要があります。

おすすめ記事