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 웹 서버를 실행하는 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에 필요한 키가 있다고 가정합니다. 웹페이지를 통해 이 프로그램을 실행하면 사용자 apache(또는 사용자 httpd)로 ssh가 실행되며, 키는 ~apache/.ssh가 사용된다. 사용자에게 비밀번호가 없는 SSH가 없으므로 "권한이 거부되었습니다".

192.168.1.50에서 웹페이지를 보고 있으므로 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로 수행합니다.

보안 문제가 우려된다면 웹 서비스와 같은 대체 솔루션을 찾아야 합니다.

관련 정보