[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Libssh (C++ wrapper): connecting to rbash
[Thread Prev] | [Thread Next]
- Subject: Libssh (C++ wrapper): connecting to rbash
- From: Pascal Bertrand <floppyzedolfin@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Tue, 11 Jun 2013 12:40:13 +0200
- To: libssh@xxxxxxxxxx
Hello, I'm trying to use libssh 5.0 to connect to an account on a machine. When running "ps -ef | grep ps " I get: rbash -c ps -ef | grep ps which corresponds to the command I'm running. So I'm on a rbash shell, with no other option given to rbash (especially, no --noprofile). When checking the ~/.profile file (which should be loaded - per man rbash), it contains PATH=/home/my_usr/bin However, when executing "echo $PATH" I get this: PATH=/usr/bin:/usr/local/bin:[etc] Does anyone know why the ~/.profile file wasn't loaded? Attached file: the wrapper around the C++ libssh.hpp file that I'm using. The command to execute the remote command is line 58. Thanks, Pascal
#include "ssh_command.h" #include "traces.h" #define DISPLAY_DEBUG_CLASS "SshCommand" SshCommand::SshCommand(Conf* aConf) { m_conf = aConf; mySession = NULL; myChannel = NULL; } SshCommand::~SshCommand() { //If we have ssh remains, delete them. local_clean(); } /* * Performs the following operations: * 1 - open a new ssh session * 2 - set options for the session * 3 - check that we know the server * 4 - check auth of user * 5 - connect as user to the remote machine * 6 - create channel in that session * 7 - open session in the channel * 8 - send the command * 9 - read the response * 10 - close the channel * 11 - disconnect the session */ /* Parameters: * iCommand: char* containing the command to run on the other machine. * oBuffer: buffer (non-null pointer) which will be filled with the response. * bufferSize: size of the buffer. * Output: * number of bytes read (that were copied into the buffer). -1 means an error occurred. */ int SshCommand::runCommand(const char* iCommand, char* oBuffer, int bufferSize) { // buffer in which we'll store the output. int bytesRead = 0; DISPLAY("Running... " << iCommand); try { initSession(); initChannel(); for(int i = 0; i<bufferSize; i++) { oBuffer[i] = '\0'; } // send the request over the channel myChannel->requestExec(iCommand); // read the output bytesRead = myChannel->read((void*)oBuffer, bufferSize); DISPLAY("Response: " << bytesRead << " " << oBuffer ); /* myChannel->sendEof(); DISPLAY("EoF" ); //check result myChannel->requestExec("echo $?"); DISPLAY("Sending echo $?"); execRead = myChannel->read((void*) execResult, bufferSize); DISPLAY("execRead: " << execRead << " " << bufferSize ); if (atoi(execResult) != 0) { bytesRead = -1; } */ } catch (ssh::SshException e){ DISPLAY("Ssh Excpetion!"); } catch (...){ DISPLAY("Exception!"); } local_clean(); return bytesRead; } void SshCommand::initSession() { int res = 0; mySession = new ssh::Session(); int timeout = 3600; if (mySession == NULL) { //throw(); } // mySession->optionsParseConfig(SSH_CONFIG_FILE); mySession->setOption(SSH_OPTIONS_HOST, m_conf->m_sshData.host.c_str()); mySession->setOption(SSH_OPTIONS_USER, m_conf->m_sshData.username.c_str()); mySession->setOption(SSH_OPTIONS_TIMEOUT, &timeout); mySession->connect(); res = mySession->isServerKnown(); if (res != SSH_SERVER_KNOWN_OK ) { //throw(); } res = mySession->userauthPassword(m_conf->m_sshData.password.c_str()); if (res != SSH_AUTH_SUCCESS) { //throw(); } } void SshCommand::initChannel() { myChannel = new ssh::Channel(*mySession); if (myChannel == NULL) { // throw(); } myChannel->openSession(); } void SshCommand::local_clean() { if(myChannel!=NULL) { if (myChannel->isOpen()) { myChannel->sendEof(); myChannel->close(); } free(myChannel); myChannel = NULL; } if (mySession != NULL) { mySession->disconnect(); free(mySession); mySession = NULL; } }
Re: Libssh (C++ wrapper): connecting to rbash | Pascal Bertrand <floppyzedolfin@xxxxxxxxx> |