scp
経由でダウンロードし、いくつかのパッケージをインストールするスクリプトを作成しました。 SSHキーがホストに追加され、実行すると
[root@HostB ~]# ./myscript
すべてがOKで、パッケージはパスワードを要求せずにscp経由でダウンロードされます。
このスクリプトをssh
経由で実行する必要がありますが、試してみると
[root@HostA ~]# ssh root@HostB "./myscript"
権限が拒否されました(公開鍵、パスワード)エラーが発生します。
ssh -t
を使おうとすると、myscriptのscp
コマンドの実行中に、パスワードの照会が行われます。
Answer =「bash」を追加
コンピュータにSSHで接続し、Jenkinsfileからスクリプトを実行する方法:このファイルは、ディレクトリ「/ home/username/ShellScriptDirectory」にある「ShellScript.sh」と呼ばれます。
Jenkinsfileから:
sh "Sudo ssh -i /home/user/myPemFile.pem -o StrictHostKeyChecking=no -n [email protected] \"bash /home/username/Shell\\ Script\\ Directory/Shell\\ Script.sh\" "
許可が拒否されました(公開鍵、パスワード)エラー
スクリプトの権限とは何の関係もありません。 ssh接続の確立に失敗しています。最初にリモートシステムでシェルを取得してみてください。
ssh -vv root@HostB
ところで、sshを介してrootアカウントへの直接アクセスを許可することは一般的に良い考えではありません-そしてあなたが示したエラーは、sshdがPermitRootLogin = Noで構成されている場合に予想されるものです。これを解決する正しい方法は、適切なSudo権限を持つアカウントをプロビジョニングし、それを使用してコマンドを実行することです。
スクリプト内でscp
を使用してパッケージをダウンロードしているとのことです。あなたの問題はそのビットにあります。問題は、次の形式でsshを実行すると次のようになることです。
ssh user@Host command
...実行中のスクリプトに割り当てられた疑似端末はありません。 scp
はパスワードの入力を求めようとしますが、そのための疑似端末が必要であるため、疑似端末がないと、アクセス許可拒否エラーが発生します(パスワード認証の試行の失敗が原因です)。 ssh -t
を使用する場合、疑似端末があり、パスワードプロンプトが機能します。理解する必要があるのは、scp
がリモートで実行されたときにパスワードの入力を求められるのに、インタラクティブなsshセッションから実行されたときではない理由です。それは別の質問です。
私の推測では、PasswordAuthentication
がyesに設定されていないためです。
PasswordAuthentication yes
これをマシンのsshd_config
に追加して、再試行してください。これにより、パスワードの入力を求められます。
別の解決策は、HostAの~/.ssh/id_rsa.pub
の内容を取得し、それをHostBのファイル~/.ssh/authorized_keys
に追加することです。
パスワード認証が有効になっているので、次のコマンドを使用して許可されたキーをインストールできます。
ssh-copy-id HostB