По поводу невозможности проброса папок в винде (win 8 и выше) на сервер.
Поподробнее можно?
Скачал Win8.1. Установил в виртуалке. Spool монтируется без ошибок. Папка с рабочего стола тоже или я не про то...

Модераторы: dimbor, Модераторы разделов
По поводу невозможности проброса папок в винде (win 8 и выше) на сервер.

 
														Tlon писал(а): ↑01.12.2016 23:53Это все та же проблема ошибка при подключении к серверу x2go с печатью
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик | 
Bizdelnick писал(а): ↑02.12.2016 00:00Tlon писал(а): ↑01.12.2016 23:53Это все та же проблема ошибка при подключении к серверу x2go с печатью
Таки сгенерируйте уже ключи.
По поводу невозможности проброса папок в винде (win 8 и выше) на сервер. В режиме дебага ошибка failed to start user mode OpenSSH server
Это значит, что локально ssh-сервер не может подняться по какой-то причине и сгенерить себе ключи.
- src/onmainwindow.h: rename ONMainWindow::generateHostDsaKey () to
ONMainWindow::generateHostKey () and make key type selectible. Fixes:
#1003. Host key type selection currently only works within the code. Replace
calls to former ONMainWindow::generateHostDsaKey () with the generalized
function and request an RSA-type key.

yukirin писал(а): ↑05.12.2016 10:55Установил себе последнюю сборку(4.0.5.2) win-клиента (предварительно зачистив реестр и папку .x2go) и получил окошко о невозможности printing and file sharing, озвученное здесь и в теме ошибка при подключении к серверу x2go с печатью.
А в режиме дебага сообщение описанное Tlon:
По поводу невозможности проброса папок в винде (win 8 и выше) на сервер. В режиме дебага ошибка failed to start user mode OpenSSH server
Это значит, что локально ssh-сервер не может подняться по какой-то причине и сгенерить себе ключи.
Правда от версии операционки это не зависит и на win7, и на win8 одно и тоже.
Так вот в режиме дебага в папке sshLogs в логе подключения висело сообщение что сервер не может подняться по причине отсутствия файлика ssh_host_dsa_key в то время как в этой папке лежал ключ ssh_host_rsa_key. Изучение changelog проекта показал что уже со сборки 4.0.5.2 они изменили тип аутентификации на rsa -
- src/onmainwindow.h: rename ONMainWindow::generateHostDsaKey () to
ONMainWindow::generateHostKey () and make key type selectible. Fixes:
#1003. Host key type selection currently only works within the code. Replace
calls to former ONMainWindow::generateHostDsaKey () with the generalized
function and request an RSA-type key.
в то время как ssh-сервер хочет запуститься с ключем ssh_host_dsa_key.
Собственно, немножко анализа кода в части запуска ssh-сервера и подтвердил мои предположения... поменяв в двух местах буковки с d на r и собрав проект получил абсолютно рабочюю программу:
Остается надеятся на исправление данной ошибки разработчиками в ближайшем будущем...
Предыдущий релиз 4.0.5.1 рабочий.
 
														| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик | 
Bizdelnick писал(а): ↑05.12.2016 12:26
Вообще-то обычно создаются оба этих ключа, а в актуальных версиях openssh ещё и ecdsa.
Так делать не надо. Верните как было и сгенерируйте rsa-ключ отдельно. ssh-keygen -A должна делать сразу все нужные ключи, если не работает — ssh-keygen -t rsa -N '' -f /путь/к/ssh_host_rsa_key
Код: Выделить всё
void ONMainWindow::startWinServers()
{
    x2goDebug<<"Starting helper servers for Windows ...";
    QString etcDir=homeDir+"/.x2go/etc";
    QDir dr ( homeDir );
    pulseServer=0l;
    WinServerStarter* xStarter = new WinServerStarter ( WinServerStarter::X,
            this );
    WinServerStarter* sshStarter = new WinServerStarter (
        WinServerStarter::SSH, this );
    if ( !embedMode || !config.confFS || ( config.confFS && config.useFs ) )
    {
        dr.mkpath ( etcDir );
        generateHostKey(RSA_KEY_TYPE);
        generateEtcFiles();
        sshStarter->start();
    }
    if(embedMode)
    {
        if ( !config.confSnd ||
                ( config.confSnd && config.useSnd ) )
        {
            startPulsed();
        }
    }
// #ifdef CFGCLIENT
    //x2goDebug<<"Xorg settings: "<< startXorgOnStart <<" useXming: "<< useXming;
    if ( useInternalX && (internalX== XMING))
    {
// #endif
        xStarter->start();
        xorgLogTimer=new QTimer ( this );
        connect ( xorgLogTimer,SIGNAL ( timeout() ),this,
                  SLOT ( slotCheckXOrgLog() ) );
        xorgLogTimer->start ( 500 );
// #ifdef CFGCLIENT
    }
    else
    {
        if (startXorgOnStart)
        {
            startXOrg();
        }
    }
// #endif
}
void WinServerStarter::run()
{
    switch ( mode )
    {
    case SSH:
        parent->startSshd();
        break;
    case X:
        parent->startXOrg();
        break;
    }
}
void ONMainWindow::generateHostKey(ONMainWindow::key_types key_type)
{
    ONMainWindow::key_types sanitized_key_type = UNKNOWN_KEY_TYPE;
    QString stringified_key_type = "";
    switch (key_type) {
        case RSA_KEY_TYPE:
                               sanitized_key_type = key_type;
                               stringified_key_type = "rsa";
                               break;
        case DSA_KEY_TYPE:
                               sanitized_key_type = key_type;
                               stringified_key_type = "dsa";
                               break;
        case ECDSA_KEY_TYPE:
                               sanitized_key_type = key_type;
                               stringified_key_type = "ecdsa";
                               break;
        case ED25519_KEY_TYPE:
                               sanitized_key_type = key_type;
                               stringified_key_type = "ed25519";
                               break;
        default:
                               sanitized_key_type = UNKNOWN_KEY_TYPE;
                               stringified_key_type = "unknown";
    }
    if (sanitized_key_type == UNKNOWN_KEY_TYPE) {
        QMessageBox::critical (this, tr ("Host key type selection error"),
                               tr ("Unknown host key selected.\nTerminating application."));
        close ();
    }
    QString etcDir = homeDir + "/.x2go/etc/";
    QDir dr (homeDir);
    dr.mkpath (etcDir);
    QString private_key_file = etcDir + "/ssh_host_" + stringified_key_type + "_key";
    QString public_key_file = private_key_file + ".pub";
    if ((!(QFile::exists (private_key_file))) || (!(QFile::exists (public_key_file))))
    {
        x2goDebug << "Generating host key. Type: " << stringified_key_type;
#ifdef Q_OS_WIN
        private_key_file = cygwinPath (wapiShortFileName (etcDir))
                         + "/ssh_host_" + stringified_key_type + "_key";
#endif
        QStringList args;
        args << "-t"
             << stringified_key_type
             << "-N"
             << ""
             << "-C"
             << QString ("X2Go Client " + stringified_key_type + "host key")
             << "-f"
             << private_key_file;
        QProcess::execute ("ssh-keygen", args);
    }
}
void ONMainWindow::generateEtcFiles()
{
    QString etcDir=homeDir+"/.x2go/etc";
    QString varDir = homeDir + "/.x2go/var";
    QDir dr ( homeDir );
    dr.mkpath ( etcDir );
    dr.mkpath (varDir);
    QFile file ( etcDir +"/sshd_config" );
    if ( !file.open ( QIODevice::WriteOnly | QIODevice::Text ) )
        return;
#ifdef Q_OS_WIN
    QString authKeyPath=cygwinPath ( homeDir+"/.x2go/.ssh/authorized_keys" );
    authKeyPath.replace(wapiGetUserName(),"%u");
#endif
    QTextStream out ( &file );
    out<<"StrictModes no\n"<<
         "UsePrivilegeSeparation no\n"<<
         "PidFile \"" + varDir + "/sshd.pid\"\n" <<
#ifdef Q_OS_WIN
         "Subsystem shell "<< wapiShortFileName ( appDir) +"/sh"+"\n"<<
         "Subsystem sftp "<< wapiShortFileName ( appDir) +"/sftp-server"+"\n"<<
         "AuthorizedKeysFile \""<<authKeyPath<<"\"\n";
#else
         "Subsystem sftp "
    /* This may need some sanitization, i.e., appDir could potentially include whitespace. */
       <<appDir<<"/sftp-server\n";
#endif
    /* The log file in startSshd() is specific to Windows. */
#ifdef Q_OS_WIN
    if (debugging){
        out<<"LogLevel DEBUG1\n";
    }
#endif
    file.close();
    x2goDebug<<etcDir +"/sshd_config created.";
}
bool ONMainWindow::startSshd()
{
    if ( embedMode && config.confFS && !config.useFs )
    {
        return false;
    }
#ifdef Q_OS_LINUX
    clientSshPort = "7022";
#else // defined (Q_OS_LINUX)
#ifdef Q_OS_DARWIN
    // Should also automatically create keys if Remote Login is enabled
    // under Sharing in System Preferences.
    if (!isServerRunning (clientSshPort.toInt ())) {
      clientSshPort = "7022";
    }
#endif // defined (Q_OS_DARWIN)
#endif // defined (Q_OS_LINUX)
    QString etcDir=homeDir+"/.x2go/etc";
    int port=clientSshPort.toInt();
    //clientSshPort have initvalue
    while ( isServerRunning ( port ) )
        ++port;
    clientSshPort=QString::number ( port );
#ifdef Q_OS_WIN
    std::string clientdir=wapiShortFileName ( appDir ).toStdString();
    std::stringstream strm;
    std::string config="\""+cygwinPath(etcDir+"/sshd_config").toStdString()+"\"";
    std::string key="\""+cygwinPath(etcDir+"/ssh_host_dsa_key").toStdString()+"\"";
    // generate a unique sshLog filepath, and create its directory
    if (debugging)
    {
        QDir* sshLogsDir= new QDir( homeDir+"/.x2go/sshLogs" );
        if (!sshLogsDir->exists())
            sshLogsDir->mkpath(".");
        QTemporaryFile* sshLogTemp=new QTemporaryFile ( sshLogsDir->absolutePath()+"/XXXXXX.log" );
        sshLogTemp->open();
        sshLog=sshLogTemp->fileName();
        sshLogTemp->close();
        delete sshLogsDir;
        delete sshLogTemp;
        x2goDebug<<"Logging cygwin sshd to: "<<sshLog;
    }
    strm<<clientdir<<"\\sshd.exe -D -p "<<clientSshPort.toInt()<<" -f "<< config <<" -h "<<key;
    if (debugging){
        strm<<" -E "<<"\""<<sshLog.toStdString()<<"\"";
    }
    STARTUPINFOA si;
    std::string desktopName="x2go_";
    desktopName+=getenv ( "USERNAME" );
    char* desktop=new char[desktopName.size() +1];
    strcpy ( desktop,desktopName.c_str() );
    x2goDebug<<"Creating desktop: "<<desktop;
    if ( !CreateDesktopA (
                desktop,
                0,
                0,
                0,
                GENERIC_ALL,
                0
            ) )
    {
        strcpy ( desktop,"" );
        x2goDebug<<"Desktop creation failed, using default.";
    }
    ZeroMemory ( &si, sizeof ( si ) );
    ZeroMemory ( &sshd, sizeof ( sshd ) );
    si.lpDesktop=desktop;
    si.cb = sizeof ( si );
    CreateProcessA ( NULL,  // No module name (use command line)
                     ( LPSTR ) strm.str().c_str(),  // Command line
                     NULL,           // Process handle not inheritable
                     NULL,           // Thread handle not inheritable
                     TRUE,          // Set handle inheritance to FALSE
                     0/*CREATE_NO_WINDOW|CREATE_NEW_PROCESS_GROUP*/,
                     //creation flags
                     NULL,           // Use parent's environment block
                     clientdir.c_str(), // Starting directory
                     &si,            // Pointer to STARTUPINFO structure
                     &sshd );// Pointer to PROCESS_INFORMATION structure
    /* FIXME: test successful SSH daemon startup */
    delete []desktop;
    winSshdStarted=true;
#else // defined (Q_OS_WIN)
    userSshd=true;
    sshd=new QProcess ( this );
    QString binary = appDir + "/sshd";
#ifdef Q_OS_DARWIN
    binary = "/usr/sbin/sshd";
#endif // defined (Q_OS_DARWIN)
    QStringList arguments;
    arguments<<"-f"<<etcDir +"/sshd_config"<< "-h" <<
             etcDir+"/ssh_host_dsa_key"<<"-D"<<"-p"<<clientSshPort;
    sshd->start (binary, arguments);
#endif // defined (Q_OS_WIN)
    // Allow sshd a grace time of 3 seconds to come up.
    QTime sleepTime = QTime::currentTime ().addSecs (3);
    while (QTime::currentTime () < sleepTime) {
        QCoreApplication::processEvents (QEventLoop::AllEvents, 100);
    }
    if (!isServerRunning (clientSshPort.toInt ())) {
        printSshDError_startupFailure ();
        x2goDebug << "Failed to start user mode OpenSSH server.";
        return (false);
    }
    else {
        x2goDebug << "User mode OpenSSH server started successfully.";
        return (true);
    }
} 
														| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик | 
Судя по приведённому Вами коду, это явный баг. Смысл в ручной генерации в таком случае есть — обойти (workaround) этот баг.
Согласитесь, всё же не из-за буквочек, а из-за того, что они означают.

Подсунул ей dsa ключ. Пошла ругня на чмоды.
Сейчас попробую cygwin поставить и через него поиграться с чмодами

yukirin писал(а): ↑07.12.2016 09:48Вообще, как я понял, вызов команды chmod 600 key не всегда эффективен. Вот по этой ссылке описывается решение вашей проблемы с добавлением еще одной команды chgrp Users key. Там же, в комментариях, приводится вариант исправления при помощи команды - setfacl.
У меня тоже появляются такие же сообщения о чрезмерной открытости ключа при применении к файлу ключа команды, скажем. chmod 777, но мне достаточно вызвать chmod 600 чтобы вернуть все обратно.


Код: Выделить всё
C:\Program Files (x86)\x2goclient> ssh-keygen -t dsa -N '' -C 'X2Go Client dsa host key' -f 'C:\Users\NameUserHere\.x2go\etc\ssh_host_dsa_key'yukirin писал(а): ↑07.12.2016 13:04Попробуйте всетаки вручную перегенерировать ключи (как вам советовал Bizdelnick) из командной строки, скажем так
Код: Выделить всё
C:\Program Files (x86)\x2goclient> ssh-keygen -t dsa -N '' -C 'X2Go Client dsa host key' -f 'C:\Users\NameUserHere\.x2go\etc\ssh_host_dsa_key'
набор параметров, для аутентичности, взят из клиента.
И при необходимости примените chmod|chgrp.
pid file "/X2GOCL~1/C:/Users/UserName/.x2go/var/sshd.pid": No such file or directory
yukirin писал(а): ↑08.12.2016 09:04Предположу что клиент и сервер не пришли к окончательному соглашению по выбору алгоритма обмена ключами. Здесь подробнее...
Код: Выделить всё
if (system("timeout 30 sshfs $code_conv -o idmap=user,uid=`id -u`,gid=`id -g`,$umaskstr,ServerAliveInterval=300,IdentityFile=$key,UserKnownHostsFile=$key.ident \"$user\"\@$host:\"@dirs[$i]\" \"$mntpath\" -p $port 1>>$sessiondir/sshfs-mounts.log 2>&1")==0)Код: Выделить всё
"C:\Program Files (x86)\x2goclient\sshd.exe" -D -p 7022 -f /cygdrive/C/Users/user/.x2go/etc/sshd_config -h /cygdrive/C/Users/user/.x2go/etc/ssh_host_dsa_key -E /cygdrive/C/Users/user/.x2go/sshLogs/sshLog.logБыл там, читал. Пробовал изменить конфигурационный файл для ssh, но не помогло,этот файл каждый раз заново генерируется
Все-таки думаю, что проблема проброса папки кроется не в ключах. Вот на винде ХРх32 в режиме дебага папка не пробрасывается, а в обычном режиме всё хорошо. И замечу, в последнем клиенте используются rsa-ключ.
yukirin писал(а): ↑09.12.2016 10:47Был там, читал. Пробовал изменить конфигурационный файл для ssh, но не помогло,этот файл каждый раз заново генерируется
Все-таки думаю, что проблема проброса папки кроется не в ключах. Вот на винде ХРх32 в режиме дебага папка не пробрасывается, а в обычном режиме всё хорошо. И замечу, в последнем клиенте используются rsa-ключ.
Если для вас все еще это актуально то попробуйте всетаки вставить в файл sshd_config строку - HostKeyAlgorithms=*
Только после этого запретите для всех пользователей/групп все write|change|delete на этом файле
yukirin писал(а): ↑09.12.2016 11:06Вам надо запретить на этом файле его изменение|удаление средствами операционки через закладку безопасность.
св-ства файла->кн. дополнительно->кн. изм. разрешения->убираем галку с Добавить разрешения, наследуемые.....->для кажого польз.|группы жмем кн. изменить-> убираем галки со всех пунктов где видим создание, запись, удаление, смена