Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: SQL > MSSQL как секьюрный telnet/ssh


Автор: Guderian 09.01.05, 09:40
Не знаю, понадобится ли кому данный финт ушами, но вчера он меня буквально спас.
Краткая предыстория ситуации такова. Застряли на удаленном серваке терминальные
сессии и терминальный сервер со спокойно душой отправлял всех к чьей-то маме,
ссылаясь на лицензионный лимит подключений. В общем, сервак стал совершенно
неуправляеми кроме ftp и mssql никакого доступа. Причем прошло пару часов плясок
с бубнами, пока я не вспомнил собственно про mssql и xp_cmdshell. Буквально
минута и используя Query Analyzer в качестве консоли все было поставлено на свои
места. Так что рекомендую всем, кому приходится рулить удаленным серваками с
установленным MSSQL повыключать любые telnet/ssh-сервера и переходить на
использование MSSQL в качестве секьюрной удаленной консоли :)
Я даже для себя небольшую консольную приблуду на c# написал, если кому
пригодиться, то я буду только рад.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    using System;
    using System.Data;
    using System.Data.SqlClient;
     
    namespace SqlTelnet
    {
        class SqlTelnet
        {
            [STAThread]
            static void Main(string[] args)
            {
                Console.WriteLine("SqlTelnet 1.0 by Guderian.");
                if (args.Length != 1)
                {
                    Console.WriteLine("Usage:\n\tSqlTelnet
    <database connection string>\nExample:\n\tSqlTelnet
    \"server=remote_ip;database=master;username;password=pass\"");
                    return;
                }
                
                try
                {
                    SqlConnection connection = new SqlConnection(args[0]);
                SqlCommand command = connection.CreateCommand();
                command.CommandType = CommandType.Text;
                connection.Open();
                        try
                         {
                    string line = null;
                    while (
                                    (line = Console.ReadLine()).ToLower() != "quit")
                    {
                    command.CommandText = string.Concat  
                                                 ("xp_cmdshell \"",line,"\"");
                    Console.WriteLinecommand.CommandText);
                            try
                            {
                            SqlDataReader reader =
                                                           command.ExecuteReader();
                             try
                             {
                              while (reader.Read())
                            {
                            for (int field = 0;
                                                 field < reader.FieldCount; field++)
                                        {
                                        Console.Write(">> {0}",reader[field].ToString());
                                        }
                                        Console.WriteLine();
                        }
                }
                    finally
                    {
                    reader.Close();
                    }
                }
                    catch (Exception e)
                        {
                Console.WriteLine("Exception: {0}",e.Message);
                            }
                        }
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
                catch (Exception e)
                {
                Console.WriteLine("Exception : {0}",e.Message);
                }
            }
        }
    }

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)