NodeJSのSSH2モジュールを使って、SSHサーバにコマンドを送信するにはどのようにすれば良いですか?
Node.jsのSSH2モジュールを使用して、SSHサーバにコマンドを送信するには、以下の手順を実行する必要があります。
const ssh2 = require('ssh2');
const conn = new ssh2.Client();
conn.connect({
host: 'example.com',
port: 22,
username: 'username',
password: 'password'
});
conn.exec('ls -la', function(err, stream) {
if (err) throw err;
stream.on('close', function(code, signal) {
console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
conn.end();
}).on('data', function(data) {
console.log('STDOUT: ' + data);
}).stderr.on('data', function(data) {
console.log('STDERR: ' + data);
});
});
この例では、"ls -la"というコマンドを実行して、結果を取得します。コマンドの実行が完了すると、ストリームのcloseイベントがトリガされ、SSH接続が終了します。
注意点として、この方法ではパスワードが平文で渡されるため、安全ではありません。認証情報を安全に管理する方法を検討する必要があります。また、SSHキー認証を使用してパスワードレスで接続することもできます。
execメソッドはconnectメソッドの直後に書いても問題はないのですか?
exec()
メソッドを connect()
メソッドの直後に書いた場合、接続が完全に確立される前にコマンドが送信される可能性があります。そのため、SSHサーバーに対してコマンドを実行する前に、SSH接続が完全に確立されることが重要です。
connect()` メソッドは非同期であるため、接続の完了を確認するためには `ready` イベントを待つ必要があります。したがって、`connect()` メソッドと `exec()` メソッドを順番に実行する場合は、`ready` イベントを待つようにコードを記述する必要があります。以下は例です。
```javascript
const ssh2 = require('ssh2');
const conn = new ssh2.Client();
conn.on('ready', function() {
conn.exec('ls -la', function(err, stream) {
if (err) throw err;
stream.on('close', function(code, signal) {
console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
conn.end();
}).on('data', function(data) {
console.log('STDOUT: ' + data);
}).stderr.on('data', function(data) {
console.log('STDERR: ' + data);
});
});
}).connect({
host: 'example.com',
port: 22,
username: 'username',
password: 'password'
});