0
免責聲明:谷歌-fu'ing通過這個我的方式...無法打開遠程文件:SCP狀態代碼1D無效libssh 0.7.3
我想知道如果任何人都能夠去看看在這&指向我在正確的方向&謝謝你的任何人能夠解決......我剛剛從想法的新鮮...
與長度變量關聯的文件大小函數是這個;
ifstream::pos_type filesize(const char* filename)
{
ifstream in(filename, ios::binary | ios::ate);
return in.tellg();
}
我從這件作品中看到了「scp狀態碼1d無效」
rc = ssh_scp_push_file(scp, "samp_batch", length, 0766);
if (rc != SSH_OK)
{
fprintf(stderr, "Can't open remote file: %s\n", ssh_get_error(my_ssh_session));
ssh_free(my_ssh_session);
exit(-1);
}
該功能;
int ssh()
{
ssh_session my_ssh_session;
ssh_scp scp;
int port = 22;
int rc;
int method;
const long int length = filesize("samp_batch");
char password[128] = { 0 };
my_ssh_session = ssh_new();
if (my_ssh_session == NULL)
exit(-1);
ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "10.52.136.185");
ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port);
ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, "security");
//connect to server
rc = ssh_connect(my_ssh_session);
if (rc != SSH_OK)
{
fprintf(stderr, "Error connecting to host: %s\n", ssh_get_error(my_ssh_session));
ssh_free(my_ssh_session);
exit(-1);
}
//verify the servers identity
if (verify_knownHost(my_ssh_session) < 0)
{
fprintf(stdout, "unkown host\n");
ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
exit(-1);
}
// Try to authenticate
rc = ssh_userauth_none(my_ssh_session, NULL);
if (rc == SSH_AUTH_ERROR) {
error(my_ssh_session);
return rc;
}
method = ssh_auth_list(my_ssh_session);
while (rc != SSH_AUTH_SUCCESS) {
// Try to authenticate with public key first
if (method & SSH_AUTH_METHOD_PUBLICKEY) {
rc = ssh_userauth_autopubkey(my_ssh_session, NULL);
if (rc == SSH_AUTH_ERROR) {
error(my_ssh_session);
return rc;
}
else if (rc == SSH_AUTH_SUCCESS) {
break;
}
}
// Try to authenticate with keyboard interactive";
if (method & SSH_AUTH_METHOD_INTERACTIVE) {
rc = authenticate_kbdint(my_ssh_session, NULL);
if (rc == SSH_AUTH_ERROR) {
error(my_ssh_session);
return rc;
}
else if (rc == SSH_AUTH_SUCCESS) {
break;
}
}
if (ssh_getpass("Password: ", password, sizeof(password), 0, 0) < 0) {
return SSH_AUTH_ERROR;
}
// Try to authenticate with password
if (method & SSH_AUTH_METHOD_PASSWORD) {
rc = ssh_userauth_password(my_ssh_session, NULL, password);
if (rc == SSH_AUTH_ERROR) {
error(my_ssh_session);
return rc;
}
else if (rc == SSH_AUTH_SUCCESS) {
break;
}
}
}
//SCP samp_batch file here
scp = ssh_scp_new(my_ssh_session, SSH_SCP_WRITE, "/");
if (scp == NULL)
{
fprintf(stderr, "Error allocating scp session: %s\n", ssh_get_error(my_ssh_session));
return SSH_ERROR;
}
rc = ssh_scp_init(scp);
if (rc != SSH_OK)
{
fprintf(stderr, "Error initializing scp session: %s\n", ssh_get_error(my_ssh_session));
ssh_scp_free(scp);
return rc;
}
rc = ssh_scp_push_file(scp, "samp_batch", length, 0766);
if (rc != SSH_OK)
{
fprintf(stderr, "Can't open remote file: %s\n", ssh_get_error(my_ssh_session));
ssh_free(my_ssh_session);
exit(-1);
}
const char *contents = "samp_batch";
rc = ssh_scp_write(scp, contents, length);
if (rc != SSH_OK)
{
fprintf(stderr, "Cant write to remote file: %s\n", ssh_get_error(my_ssh_session));
ssh_free(my_ssh_session);
exit(-1);
}
ssh_scp_close(scp);
ssh_scp_free(scp);
return SSH_OK;
//execute remote command here
ssh_free(my_ssh_session);
return 0;
}
再說一次,任何見解都會很棒。我什至不能找到任何解釋什麼狀態代碼1d意味着:/
嘗試運行'ssh user @ remotehost echo foo'使用您用於此過程的相同用戶和主機。除了遠程服務器上的「foo」之外,還有其他的東西嗎?特別是,你會得到一個歡迎橫幅或類似的東西嗎?另外,您是否可以通過交互式運行'scp'實用程序來複制此文件? – Kenster
@Kenster對於「ssh user @ remotehost echo foo」,[foo]是唯一返回的內容,沒有橫幅等,它是一個已知的主機,共享的pub文件。對於scp,[scp samp_batch user @ remotehost:/ home/user/samp_batch像魅力一樣工作 – Snow
@Kenster [ssh_scp_new(session,ssh_scp_write,「filepath」);是不同的!它實際上是在遠端創建一個文件:D。 (我現在也遇到了分段錯誤,但我明天就會開始工作)。謝謝您的幫助。 – Snow