По поводу невозможности проброса папок в винде (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Вам надо запретить на этом файле его изменение|удаление средствами операционки через закладку безопасность.
св-ства файла->кн. дополнительно->кн. изм. разрешения->убираем галку с Добавить разрешения, наследуемые.....->для кажого польз.|группы жмем кн. изменить-> убираем галки со всех пунктов где видим создание, запись, удаление, смена