Source code for pykickstart.commands.sshpw

#
# Peter Jones <pjones@redhat.com>
#
# Copyright 2009 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the GNU
# General Public License v.2.  This program is distributed in the hope that it
# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the
# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  Any Red Hat
# trademarks that are incorporated in the source code or documentation are not
# subject to the GNU General Public License and may only be used or replicated
# with the express permission of Red Hat, Inc.
#
from pykickstart.version import F13, F24
from pykickstart.base import BaseData, KickstartCommand
from pykickstart.errors import KickstartParseError, KickstartParseWarning
from pykickstart.options import KSOptionParser
import warnings

from pykickstart.i18n import _

[docs] class F13_SshPwData(BaseData): removedKeywords = BaseData.removedKeywords removedAttrs = BaseData.removedAttrs def __init__(self, *args, **kwargs): BaseData.__init__(self, *args, **kwargs) self.username = kwargs.get("username", None) self.isCrypted = kwargs.get("isCrypted", False) self.password = kwargs.get("password", "") self.lock = kwargs.get("lock", False) def __eq__(self, y): if not y: return False return self.username == y.username def __ne__(self, y): return not self == y def __str__(self): retval = BaseData.__str__(self) retval += "sshpw" retval += self._getArgsAsStr() + '\n' return retval def _getArgsAsStr(self): retval = "" retval += " --username=%s" % self.username if self.lock: retval += " --lock" if self.isCrypted: retval += " --iscrypted" else: retval += " --plaintext" retval += " %s" % self.password return retval
[docs] class F24_SshPwData(F13_SshPwData): removedKeywords = F13_SshPwData.removedKeywords removedAttrs = F13_SshPwData.removedAttrs def __init__(self, *args, **kwargs): F13_SshPwData.__init__(self, *args, **kwargs) self.sshkey = kwargs.get("sshkey", False) def _getArgsAsStr(self): retval = "" retval += " --username=%s" % self.username if self.sshkey: retval += ' --sshkey' else: if self.lock: retval += " --lock" if self.isCrypted: retval += " --iscrypted" else: retval += " --plaintext" retval += " %s" % self.password return retval
[docs] class F13_SshPw(KickstartCommand): removedKeywords = KickstartCommand.removedKeywords removedAttrs = KickstartCommand.removedAttrs def __init__(self, writePriority=0, *args, **kwargs): KickstartCommand.__init__(self, writePriority, *args, **kwargs) self.op = self._getParser() self.sshUserList = kwargs.get("sshUserList", []) def __str__(self): retval = "" for user in self.sshUserList: retval += user.__str__() return retval def _getParser(self): op = KSOptionParser(prog="sshpw", description=""" The installer can start up ssh to provide for interactivity and inspection, just like it can with telnet. The "inst.sshd" option must be specified on the kernel command-line for Anaconda to start an ssh daemon. The sshpw command is used to control the accounts created in the installation environment that may be remotely logged into. For each instance of this command given, a user will be created. These users will not be created on the final system - they only exist for use while the installer is running. Note that by default, root has a blank password. If you don't want any user to be able to ssh in and have full access to your hardware, you must specify sshpw for username root. Also note that if Anaconda fails to parse the kickstart file, it will allow anyone to login as root and have full access to your hardware.""", version=F13) op.add_argument("--username", required=True, metavar="<name>", version=F13, help=""" Provides the name of the user. This option is required. """) op.add_argument("--iscrypted", dest="isCrypted", action="store_true", default=False, version=F13, help=""" If this is present, the password argument is assumed to already be encrypted.""") op.add_argument("--plaintext", dest="isCrypted", action="store_false", version=F13, help=""" If this is present, the password argument is assumed to not be encrypted. This is the default.""") op.add_argument("--lock", action="store_true", default=False, version=F13, help=""" If this is present, the new user account is locked by default. That is, the user will not be able to login from the console.""") op.add_argument("password", metavar="<password>", nargs="*", version=F13, help=""" The password string to use.""") return op
[docs] def parse(self, args): ud = self.dataClass() # pylint: disable=not-callable (ns, extra) = self.op.parse_known_args(args=args, lineno=self.lineno) if not ns.password: raise KickstartParseError(_("A single argument is expected for the %s command") % "sshpw", lineno=self.lineno) if extra: mapping = {"command": "sshpw", "options": extra} raise KickstartParseError(_("Unexpected arguments to %(command)s command: %(options)s") % mapping, lineno=self.lineno) self.set_to_obj(ns, ud) ud.password = " ".join(ns.password) ud.lineno = self.lineno if ud in self.dataList(): warnings.warn(_("An ssh user with the name %s has already been defined.") % ud.username, KickstartParseWarning) return ud
[docs] def dataList(self): return self.sshUserList
@property def dataClass(self): return self.handler.SshPwData
[docs] class F24_SshPw(F13_SshPw): removedKeywords = F13_SshPw.removedKeywords removedAttrs = F13_SshPw.removedAttrs def _getParser(self): op = F13_SshPw._getParser(self) op.add_argument("--sshkey", action="store_true", default=False, version=F24, help=""" If this is used then the <password> string is interpreted as an ssh key value.""") return op