Я создал программу с использованием Perl CGI, в которой я вызываю свой серверный скрипт, находящийся в удаленном месте. Для этого я использовал OpenSSH. Но когда я запускаю этот скрипт со своего терминала, он работает нормально, мой скрипт на удаленной машине также работает правильно. Но когда я делаю это из браузера, это не работает. Я использовал нижеприведенный сценарий.
#!/usr/bin/perl
use warnings;
use strict;
use CGI;
use Net::OpenSSH;
use warnings;
our $cgi = new CGI;
use Net::OpenSSH;
my %opts = (
user => "UNAME",
#password => "MYPASSWORD",
strict_mode => 0,
);
my $ssh = Net::OpenSSH->new("MY SERVER_IP",%opts,master_opts => [-i => "MY KEY FILE"], async => 1);
$ssh->system("/root/test.sh") or
die "remote command failed: " . $ssh->error;
Ниже приведены журналы журналов ошибок apache.
[Пт 27 июня, 12:11:57 2014] [ошибка] [client localhost] В разрешении отказано (publickey, gssapi-keyex, gssapi-with-mic). \ R, referer: http: //X.X.X.X/cgi-bin1/test.cgi
CGI-скрипты обычно запускаются от имени того же пользователя, под которым запущен веб-сервер - часто от имени пользователя. wwwdata
, или www
. Поскольку ваш ключевой файл ограничен вашим собственным именем пользователя, huzefa
, веб-сервер не может получить к нему доступ.
Если бы вы разрешили пользователю веб-сервера использовать ваш собственный ключ ssh, то кто-то, обнаруживший дыру в безопасности на вашем веб-сервере, мог бы использовать ваш ключ, а затем войти на любой сервер, к которому у вас есть доступ с этим ключом. Вы, наверное, этого не хотите.
Есть несколько способов обойти это, не открывая огромной дыры в безопасности. Самый простой - просто настроить отдельный ключ ssh для этого конкретного использования:
authorized_keys
файл на сервере.from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/root/test.sh" ssh-dss AA.....
Процесс веб-сервера принадлежит apache
пользователь не как root
.
Удостоверься что apache
у пользователя есть пароль меньше доступа к другому серверу
SELinux должен быть отключен
Обратитесь: http://wccandlinux.blogspot.in/2016/07/how-to-run-ssh-command-from-apache.html